将Rails form_for路由到自定义控制器的语法

use*_*251 6 controller ruby-on-rails form-for

尝试了论坛,文档和博客建议.他们聚合语法,对我来说,没有正确保存并通过所需的控制器路由.

总的来说,我有两个共享功能的软件应用程序.为了实现共享功能,我让Rails生成Shared :: Widgets.这个MVC工作正常.使用标准共享/小部件和等路由查看,更新,创建或删除没问题.

然后,为了产品特定的功能,我创建了两个控制器:Product1 :: Widgets和Product2 :: Widgets.两者都继承自Shared :: Widgets控制器.除产品特定布局外,两者都是空的.

这个方案几乎可行.当我路由到product1/widgets时,它将layout设置为product1并调用shared/widgets的index方法.结果是显示带有product1布局的shared/widgets/index.html.erb.类似地,当我路由到product2/widgets时,这会设置product2布局并调用shared/widgets的索引方法.结果是显示带有product2布局的shared/widgets/index.html.erb.完善.

但现在我们到了form_for.因为它实现了rails魔术,所以它真的非常想直接路由到Shared :: Widgets控制器.但这不是我想要的.我希望它路由到适当的产品控制器,以便设置布局.生成form_for的rails是这样的:

form_for(@shared_widget, :html => { :class => "form"}) do |f|
Run Code Online (Sandbox Code Playgroud)

我试过了:

form_for([:product1, @widget], :html => { :class => "form"}) do |f| 
Run Code Online (Sandbox Code Playgroud)

但是重复了名称空间(product1_widget_shared_widget_path).

我尝试了以下三种格式,所有这些格式似乎都正确路由,并保存记录,但记录为空(列为空):

form_for(@widget, url => "product1/widget", :html => { :class => "form"}) do |f| 

form_for(@widget, url => url_for(:controller => "widget"), :html => { :class => "form"}) do |f| 

form_for(@widget, url => url_for(:controller => "widget", :action => "create"), :html => { :class => "form"}) do |f| 
Run Code Online (Sandbox Code Playgroud)

有帮助吗?如果上面的代码有拼写错误,那是由于转录.我使用的实际代码通过了解释器.谢谢.

ajb*_*aus 2

尝试这个

form_for(url: { controller: "posts", action: "create" }, html => { :class => "form" }, method: "post") do |f| 
Run Code Online (Sandbox Code Playgroud)