当我点击'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 ...
知道为什么它试图访问的路线是复数?
答案 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无法反映 在路线上查看是否是资源。