在rails 4应用程序中,我有一个book资源,它是一个Book模型及其控制器,视图和路径。它是由以下内容创造的:
rails g scaffold book title
现在我想要另一组视图(和另一个控制器),它允许管理相同的模型,可能专用于不同的用户。
我希望创建功能和编辑功能都可以在这个不同的路径和视图上使用。
我们称之为book2。
/ book2 url中的视图应该在Book2sController上运行。
但是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 %>
答案 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
(可能是create
或update
)。
请注意,您不需要像现在这样包含url_for
。