rails,form_for在第二个路由器中,但在同一型号上

时间:2015-01-22 22:21:25

标签: ruby-on-rails rest

在rails 4应用程序中,我有一个book资源,它是一个Book模型及其控制器,视图和路径。它是由以下内容创造的:

rails g scaffold book title

现在我想要另一组视图(和另一个控制器),它允许管理相同的模型,可能专用于不同的用户。
我希望创建功能和编辑功能都可以在这个不同的路径和视图上使用。
我们称之为book2。
/ book2 url中的视图应该在Book2sController上运行。

form_for support

但是form_for从模型类中猜测提交路由(并将其置于action属性中),因为它总是Book,让轨道猜测提交URL是/ books / 1用于编辑或/ books / for new and not / book2s / 1 for edit and / book2s / for new as the should。
所以我找到了这个解决方案,但我发现它有点麻烦。 那里有什么更好的吗?

<%= form_for @book, :url => @book.new_record? ? url_for(book2s_path) :   url_for(book2_path(@book))  do |f| %>
    <%= f.text_field :title %>
<% end %>

1 个答案:

答案 0 :(得分:0)

您可以在控制器中设置网址。

def new
  # ...
  @form_url = book2s_path
  # ...
end

def edit
  # ...
  @form_url = book2_path(@book)
  # ...
end

然后您的观点变为:

<%= form_for @book, :url => @form_url  do |f| %>
    <%= f.text_field :title %>
<% end %>

我也看到了:

<%= form_for @book, :url => {:controller => 'book2s', :action => @action}  do |f| %>
    <%= f.text_field :title %>
<% end %>

您只需在控制器中设置@action(可能是createupdate)。

请注意,您不需要像现在这样包含url_for