【问题标题】:Rails form_for as: with nested resourceRails form_for as:带有嵌套资源
【发布时间】:2017-02-07 23:00:49
【问题描述】:

我的路线设置如下:

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 参数?

【问题讨论】:

  • 上一个问题:stackoverflow.com/questions/10906793/… 似乎表明如果您在类名上使用命名空间,它可能会干扰从对象自动生成您的路线...您是否命名了您的项目因素类类似于:Project::ProjectFactor ???
  • 不,刚刚命名为 ProjectFactor:class ProjectFactor < Factor

标签: ruby-on-rails form-for


【解决方案1】:

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

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 感觉有点像蓝精灵打字... ;) YMMV

【讨论】:

  • 是的,就像我提到的那样,明确设置 url 是我试图避免的,从那时起我必须在表单上设置一个条件,以确定记录是否保存。重命名模型在这里并不是一个真正的选择,ProjectFactor 已经继承自 Factor。我的问题真的是为什么 form_for 中的as 对生成的 url 没有影响。
  • 是的...我同意这是一个很好的问题(我不知道答案)...可能值得深入研究url_for 的源代码(尽管它可能是兔子窝)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-03
  • 2011-01-03
  • 2013-01-14
  • 2017-01-10
  • 2011-01-16
相关资源
最近更新 更多