1

当我单击“项目”显示页面上的“新计划状态”按钮时,错误显示的路线是复数,而它应该是单数。这是我的代码:

# 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 ...

知道为什么它尝试访问的路线是复数吗?

4

2 回答 2

1

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

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

查看这个问题/答案以获得更清晰的信息。

于 2012-06-16T00:25:06.100 回答
0

这不是错误,而是一项功能(票证已关闭,无法修复):

导轨问题:

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

总结报价:

该错误已经存在了很长时间,但是干净的解决方案并不容易代表自己。polymorphic_url 助手在其操作方式上没有“智能”——它没有关于您在 routes.rb 中声明为资源的信息。它所要做的就是模型的名称以及它如何映射到命名的 url 助手。

问题是没有简单的方法来辨别模型是映射到单个资源 URL 还是常规资源 URL。检查集合 url 的存在不起作用,因为资源可能已使用 :except => :index 指定,并且尝试挽救路由生成错误不起作用,因为将实例传递给单个资源 url 帮助程序将生成格式设置为 id 的 url,也不例外。

rails 问题以支持前一个的方式结束: https ://github.com/rails/rails/issues/4978

结论

在这种情况下,您应该提供网址。url_for 无法反映路由以查看这是否是资源。

于 2012-06-16T00:46:21.543 回答