【问题标题】:Rails routing name conventionRails 路由命名约定
【发布时间】:2011-07-14 06:38:59
【问题描述】:

由于某种原因,特定控制器的常规路径名不起作用? (轨道 3.1)

我使用 ryan bates 漂亮的脚手架创建了一个控制器。只是一个控制器,没有底层模型。

在我拥有的控制器中

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 

如果我更改要使用的链接

&lt;%= link_to "New Project Templates", {:controller=&gt;"project_templates, :action=&gt;"new"} %&gt;

那么它就完美了?!为什么action_controller_path的命名约定在这种情况下不起作用?

【问题讨论】:

  • new_project_template_path 有效吗?如果是这样,那将是由于屈折库
  • 您是否已经运行rake routes,以检查该路线是否如您所想的那样存在?

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1


【解决方案1】:

前一篇文章的一个简单附录,指出了运行 rake 路由的可能性。如果在 POSIX 系统上,请通过 grep 或其他文本过滤器运行结果。

rake routes | grep project

bundle exec rake routes | grep project

在大型项目中生成的路线可能会非常丰富,因此我建议成为命令行工具专家,以便有效地处理数据。

【讨论】:

  • 现在您不需要使用bundle exec,只需使用bundle install --binstubsexport PATH=./bin:$PATH。我过去所做的只是将导出行添加到我的.rvmrc 文件并添加bin .gitignore
【解决方案2】:

您可以在命令行中使用rake routes 找到所有路由及其名称。

Rails 知道您使用的复数形式,因此它可以神奇地删除它并命名路线 new_project_template_path 而不使用“s”?

【讨论】:

  • 是的,确实是由于复数,new_project_template_path 工作得很好。谢谢大家:)
【解决方案3】:

如果您使用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]

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    相关资源
    最近更新 更多