由于某种原因,特定控制器的常规路径名不起作用? (Rails 3.1)
我使用ryan bates nifty scaffold创建了一个控制器。只是一个控制器,没有底层模型。
在控制器中我
class ProjectTemplatesController < ApplicationController
# a bunch of stuff
def new
@project = Project.new
end
#more stuff
end
在我看来(app / views / project_templates / index.html.erb)我有:
<p><%= link_to "New Project Templates", new_project_templates_path %></p>
然而我收到了错误
undefined local variable or method `new_project_templates_path' for #<#<Class:0x2ab9c24>:0x2ab80e0>
在我的routes.rb文件中,我将控制器声明为与所有其他资源一样的资源
resources :project_templates
如果我更改了使用链接
<%= link_to "New Project Templates", {:controller=>"project_templates, :action=>"new"} %>
然后它运作得很好?!为什么action_controller_path的命名对象在这种情况下不起作用?
答案 0 :(得分:2)
您可以使用rake routes
在命令行中找到所有路由及其名称。
Rails知道你正在使用的复数,所以它可以神奇地删除它并命名路由new_project_template_path
而没有's'?
答案 1 :(得分:2)
以前帖子的简单附录,指出可以运行佣金路线。如果在POSIX系统上,通过grep或其他文本过滤器运行结果。
rake routes | grep project
或
bundle exec rake routes | grep project
生成的路由在大型项目中可以变得非常丰富,因此我建议成为命令行工具大师,以便有效地处理数据紧缩。
答案 2 :(得分:0)
如果您使用resources :project_templates
,则可以安全地执行以下操作:
link_to "All Project Templates", :project_templates
link_to "New Project Template", [:new, :project_template]
link_to "Edit Project Template", [:edit, @project_template]
link_to "Show Project Template", @project_template
link_to "Delete Project Template", @project_template, :method => :delete
form_for ProjectTemplate.new do |f|
form_for @projectTemplate do |f|
这样,您不必记住复数或单数问题。
还有一件事是你实际上可以将它们全部包裹在[]
中,这样你就不用担心它们了。
link_to "All PT", [:project_templates]
link_to "Show PT", [@project_template]