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的源代码(尽管它可能是一个兔子窝)