尝试过论坛、文档和博客建议。他们收敛于对我来说无法正确保存并通过所需控制器路由的语法。
大局,我有两个共享功能的软件应用程序。为了实现共享功能,我让 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 的 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|
有什么帮助吗?如果上面的代码有拼写错误,那是由于转录造成的。我使用的实际代码通过了解释器。谢谢你。