我尝试了论坛、文档和博客的建议。它们收敛到一种语法上,但对我来说并不能正确地保存并通过期望的控制器进行路由。
总的来说,我有两个软件应用程序共享功能。为了实现共享功能,我让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|
需要帮忙吗?如果上述代码存在拼写错误,那是因为抄写错误。我使用的实际代码已通过解释器。谢谢。