在嵌套资源中使用相同的'_form'进行'create'和'update'

时间:2012-02-07 08:20:36

标签: ruby-on-rails-3 rest

轨:

我使用相同的部分'_form'

'创建'和'更新'

但表单应发送到的网址是不同的

我生成的rails代码将@xxx作为参数提供给form_for

我想rails会判断是否内容为空来发送给'创建'或'更新'?

但我使用的是嵌套资源。 rails似乎并不那么聪明。

那么,我的最佳做法是什么?

将'if'放入_form?

创建和更新同时使用一个局部模板_form

但是表单提交的URL不一样

rails自动生成的直接给form_for给了个@xxx做参数我猜是按内容是否为空判断是创还还是更新的?

但是我的情况是个嵌套的资源

导轨似乎没有聪明到这种程度?

那么我的最佳实践是什么?

在_form中写逻辑判断么?

路线:

        book_structures GET    /books/:book_id/structures(.:format)             {:controller=>"structures", :action=>"index"}
                        POST   /books/:book_id/structures(.:format)             {:controller=>"structures", :action=>"create"}
     new_book_structure GET    /books/:book_id/structures/new(.:format)         {:controller=>"structures", :action=>"new"}
    edit_book_structure GET    /books/:book_id/structures/:id/edit(.:format)    {:controller=>"structures", :action=>"edit"}
         book_structure GET    /books/:book_id/structures/:id(.:format)         {:controller=>"structures", :action=>"show"}
                        PUT    /books/:book_id/structures/:id(.:format)         {:controller=>"structures", :action=>"update"}

_form:

<%if (form_method == :post) %>
  <%using_url = book_structures_path%>
<%elsif (form_method == :put) %>
  <%using_url = book_structure_path%>
<%end%> 
<%= form_for(@structure,:url => using_url,:method => form_method) do |f| %>

1 个答案:

答案 0 :(得分:1)

您可以使用

<%= form_for([@book, @structure] ,:method => form_method) do |f| %>

为嵌套资源构建表单。