我认为这是一个简单的问题,但我只是被困在这里。
我有两个模型 Category
和 Project
,Category
有很多 Project
。
然后,我以为会有这样一条路线
http://localhost:3000/categories/1872/projects/499 ,1872
将是类别的 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/