Ruby on rails as的Rails表单_:带有嵌套资源
我的路线设置如下所示:Ruby on rails as的Rails表单_:带有嵌套资源,ruby-on-rails,form-for,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) 但是我在获取用于生成正确路线的表单时遇到困难 [@project,@
resources :projects do
resources :project_factors, as: factors
end
我喜欢使用as::factors
,因此路线变成:
project_factor_path(@project, @project_factor)
而不是
project_project_factor_path(@project, @project_factor)
但是我在获取用于生成正确路线的表单时遇到困难
[@project,@project\u factor]
的表单失败(如预期),因为它尝试使用project\u project\u factor\u路径
,所以我尝试了:
form_for [@project, @project_factor], as: :factor
但这失败了,错误完全相同
有没有一种方法可以让rails在这里生成正确的路径,而无需为create and update案例显式设置正确的
url
参数?不理想,但您可以将路径单独传递给对象,例如:
form_for [@project, @project_factor], :url => project_factor_path(@project, @project_factor)
(注:未测试)
不过我觉得有点多余。。。这正是你想要减少的,所以对你来说可能不是一个好的解决方案:P
另一种方法可能是将您的project\u factor
模型重命名为factor
。您仍然可以将数据库表名指定为project\u factors
(在类中使用self.table\u name='project\u factors'
,以便Rails查找它)
对我来说,project/project\u factors
感觉有点像蓝精灵打字……)
YMMV前面的问题:似乎表明如果在类名上使用名称空间,它可能会干扰从对象自动生成路由。。。您是否将您的项目因素类命名为:
project::ProjectFactor
??不,只是命名为ProjectFactor:class ProjectFactor
是的,正如我提到的,显式设置url是我试图避免的,因为从那时起,我必须在表单上设置一个条件,以确定记录是否保存。重命名模型在这里不是一个真正的选项,ProjectFactor已经从Factor继承。我的问题是为什么表单中的as
对生成的url没有影响。是的。。。我同意这是一个好问题(我不知道答案)。。。可能值得深入研究的url\u的源代码(尽管它可能是一个兔子窝)