Rails在循环嵌套资源时选择错误的路由

时间:2014-01-14 02:13:56

标签: ruby-on-rails ruby-on-rails-4

我有两个资源,ClientsProjects

routes.rb

resources :clients do
  resources :projects
end

rake routes为我提供client_project操作的路由前缀projects#show

在我看来,我打电话给:

<% @client.projects.each do |project| %>
  <%= link_to project.name, project %>
<% end %>

并且Rails不断抛出错误:undefined method project_path,它告诉我由于某种原因该视图试图调用project_path而不是client_project_path。我尝试重新启动我的服务器(甚至重新启动我的电脑),似乎无法找到为什么它不会正确调用路由。我最近重构了我的路线(这导致了这个突破)。我在这里错过了什么吗?这个确切的模式适用于我的应用程序中的每个其他模型,只有重构的路径不适用。

2 个答案:

答案 0 :(得分:0)

我从来没有成功通过简单地将有问题的对象作为link_to的url参数传递来获得嵌套路由......加上(也许只是我)我喜欢我的模板有点像比那更“明确”。

你可以做几件事:

<%= link_to project.name, url_for([@client, project]) %>

<%= link_to project.name, client_project_path(@client, project) %>

答案 1 :(得分:0)

如果项目是嵌套路由,除非您明确定义,否则它将没有project_path路由。项目URL需要客户端。看看http://guides.rubyonrails.org/routing.html#nested-resources