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

时间:2013-04-24 13:14:15

标签: ruby-on-rails controller 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|

我试过了:

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

但是重复了名称空间(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| 

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

1 个答案:

答案 0 :(得分:2)

试试这个

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