代码之家  ›  专栏  ›  技术社区  ›  deb

如何省略Rails中嵌套形式的现有子记录?

  •  6
  • deb  · 技术社区  · 16 年前

    在我的申请中 用户 有许多 项目 . 我想创建一个 添加多个项目 “形式,所以 用户 可以创造很多 项目 马上。

    在我看来,最快的方法是使用嵌套在其中的项目字段创建用户窗体,并省略用户字段。这样,当表单提交时,用户将被保存并自动创建所有新的项目记录。

    但是,我不想 现有的 要在窗体中显示的项目。只有 空字段 对于正在创建的新项目(从@user.projects.build)。是否有我可以传递的参数,或者我可以在表单中更改某些内容以忽略现有的项目记录?

    <% form_for (@user) do |f| %>
    
       <% f.fields_for :project do |project_form| %>
          <%= render :partial => 'project', :locals => {:f => project_form}  %>
       <% end %>
    
       <%= add_child_link "New Project", f, :projects %>
    
       <%= f.submit "save" %> 
    
    <%end%>
    

    我在用瑞恩·贝特的 complex forms 例子。代码工作正常。我只想从这个表单中忽略现有的项目。

    2 回复  |  直到 16 年前
        1
  •  7
  •   klew    16 年前

    你可以使用 new_record? 区分新创建记录和旧记录的方法:

    <% form_for @user do |f| %>
       <% f.fields_for :project do |project_form| %>
          <%= render :partial => 'project', :locals => {:f => project_form} if project_form.object.new_record? %>
       <% end %>
       <%= add_child_link "New Project", f, :projects %>
       <%= f.submit "save" %> 
    <% end %>
    
        2
  •  1
  •   inkdeep    16 年前

    你可以试试

      <% f.fields_for :project, Project.new do |project_form| %>
        <%= render :partial => 'project', :locals => {:f => project_form}  %>
      <% end %>
    

    这将为一个记录提供空白字段。

    在控制器中,可以为关系生成多个记录

     5.times { @user.projects.build }
    

    这将生成五个与用户相关的新空项目,您当前的字段将具有用于新记录的字段。

    推荐文章