ruby-on-rails - Rails 路由多对一

标签 ruby-on-rails ruby routes

我认为这是一个简单的问题,但我只是被困在这里。

我有两个模型 CategoryProjectCategory 有很多 Project

然后,我以为会有这样一条路线

http://localhost:3000/categories/1872/projects/4991872 将是类别的 ID,499 将是项目的 ID。该页面将显示该项目的信息。

所以,我在 routes.rb 中写了这个

get '/categories/:id/projects/:id', to: 'projects#show', as: 'project'

在类别的展示页面,我写了

<% @category.projects.each do |project| %>
<h1>
<%= link_to "#{project.name}", project %>
</h1>
<% end %>

但我创建的链接将是 http://localhost:3000/categories/499/projects/499

更新

我已经把路线改成了

resources :categories, only: [:index, :show]  do
    resources :projects, only: [:show]
end

但是,我不知道如何在类别的显示页面中编写link_to路径。

这是我写的

<% @category.projects.each do |project| %>
    <%= link_to "#{project.name}", category_project_path %>
<% end %>

但是它抛出了这个错误

No route matches {:action=>"show", :controller=>"projects", :id=>"1982"} missing required keys: [:category_id] 

最佳答案

你应该为此使用嵌套路由,我建议使用资源,只需写:

resources :categories do
  resources :projects
end

您可以在此处阅读更多信息 Rails Routing from the Outside In

更新:

要正确链接该路由,您只需使用项目路径 <%= link_to "#{project.name}", project_path(project) %>

或使用类似 <%= link_to "#{project.name}", category_project_path(category, project) %> 的 category_project_path

关于ruby-on-rails - Rails 路由多对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38356066/

相关文章:

ruby-on-rails - 尽管 expires_in 24.hours,Rails 缓存值丢失/为零

ruby-on-rails - "rvm requirements"给出的依赖项有什么用?

ruby-on-rails - Rails 控制台是动态的吗?

laravel - 在 laravel 中使用模态框删除数据

ruby-on-rails - Rails Controller 私有(private)方法的功能测试

ruby-on-rails - 使用 RABL 为 JSON 模板进行缓存预热

ruby-on-rails - TC 服务器无法读取 Rails 代码错误说堆栈级别太深

ruby-on-rails - 推送到 Heroku 时带有 Postgres 的 Rails 迁移错误

c# - 是否可以为整个 MVC 应用程序设置全局 RoutePrefix?

node.js - 参数覆盖静态路由的快速路由