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

6

我尝试了论坛、文档和博客的建议。它们收敛到一种语法上,但对我来说并不能正确地保存并通过期望的控制器进行路由。

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

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

这个方案几乎可以正常工作。当我路由到product1/widgets时,它会将布局设置为product1并调用shared/widgets的index方法。结果显示了带有product1布局的shared/widgets/index.html.erb。同样,当我路由到product2/widgets时,它会将product2布局设置并调用shared/widgets的index方法。结果是带有product2布局的shared/widgets/index.html.erb。完美。

但现在我们要处理form_for。因为它实现了Rails魔法,它确实非常想直接路由到Shared::Widgets控制器。但这不是我想要的。我希望它路由到适当的产品控制器,以设置布局。Rails生成的form_for大致如下:

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个回答

2

试一试

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

应该是: HTML 我认为 - zasman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接