Rails有一个新的行动走向错误的路线

时间:2012-06-16 00:02:28

标签: ruby-on-rails routes associations has-one

当我点击'Project'节目页面上的'New Schedule Status'按钮时,但是错误显示的路线是复数,当它应该是单数时。这是我的代码:

# project.rb
class Project < ActiveRecord::Base
  has_one :schedule_status
end

# schedule_status.rb
class ScheduleStatus < ActiveRecord::Base
  belongs_to :project
end

# schedule_statuses_controller.rb
def new
  @project = Project.find(params[:project_id])
  @schedule_status = @project.build_schedule_status
end

# routes.rb
resources :projects do
  resource :schedule_status
end

# _form.html.erb
<%= form_for [@project, @schedule_status] do |f| %>
  ...

错误通知我form_for行不正确。看起来我的实例变量设置正确,但错误是:

undefined method `project_schedule_statuses_path` for ...

知道为什么它试图访问的路线是复数

2 个答案:

答案 0 :(得分:1)

这是一个错误。 form_for查找对象的复数形式。但是,由于您已声明了一个奇异的资源:schedule_status,因此永远不会创建路径帮助器方法。

要解决这个问题,你应该使用:form_for的url参数。

请查看此question/answer以获得更清晰的信息。

答案 1 :(得分:0)

这不是功能的错误(因为无法解决,故障单已关闭):

rails问题:

https://github.com/rails/rails/issues/1769

摘要引用:

  

这个错误已经存在了很长一段时间,但却是一个干净的解决方案   不容易代表自己。 polymorphic_url帮助器没有   关于它如何运作的“智慧” - 它没有关于什么的信息   你已经在routes.rb中声明为资源。它必须继续下去   模型的名称以及如何映射到指定的url助手。

     

问题是没有简单的方法来辨别模型是否映射   单一或常规资源网址。检查是否存在   由于可能已指定资源,因此集合URL无效   with:except =&gt; :索引并试图挽救路由生成错误   因为将实例传递给单个资源URL而无效   helper将生成一个格式设置为id和no的url   异常。

rails已关闭以支持上一个: https://github.com/rails/rails/issues/4978

<强>结论

  

在这种情况下,你应该给网址。 url_for无法反映   在路线上查看是否是资源。