Rails form_for as:with nested resource

时间:2017-02-07 23:00:49

标签: ruby-on-rails form-for

我的路线设置如下:

resources :projects do
  resources :project_factors, as: factors
end

我喜欢拥有as: :factors所以路线变为:

project_factor_path(@project, @project_factor)

而不是

project_project_factor_path(@project, @project_factor) 

但是我无法让form_for生成正确的路线。

form_for [@project, @project_factor]失败(正如预期的那样),因为它尝试使用project_project_factor_path,所以我尝试了:

form_for [@project, @project_factor], as: :factor

但是失败并出现完全相同的错误。

有没有办法让rails生成正确的路径,而无需为创建和更新案例明确设置正确的url参数?

1 个答案:

答案 0 :(得分:0)

不理想,但您可以将路径分别传递给对象,例如:

form_for [@project, @project_factor], :url => project_factor_path(@project, @project_factor)

(注:未经测试)

虽然感觉有点多余......这正是你想要减少的,所以对你来说可能不是一个好的解决方案:P

另一种方法可能是将project_factor模型重命名为factor。您仍然可以将数据库表名称指定为project_factors(在类中使用self.table_name = 'project_factors'以便Rails找到它。)

对我而言,project/project_factors感觉有点像smurf-typing ......;) YMMV