7

私のアプリケーションでは、ユーザーは多くのプロジェクトを持っています。ユーザーが一度に多くのプロジェクトを作成できるように、「多くのプロジェクトを追加する」フォームを作成したいと思います。

最も簡単な方法は、プロジェクトフィールドがネストされたユーザーフォームを作成し、ユーザーフィールドを省略することであるように思われました。このように、フォームが送信されると、ユーザーが保存され、すべての新しいプロジェクトレコードが自動的に作成されます。

ただし、既存のプロジェクトをフォームに表示したくありません。(@ 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%>

ライアンベイトの複雑なフォームの例を使用しています。コードは正常に機能します。既存のプロジェクトがこのフォームに表示されないようにしたいだけです。

4

2 に答える 2

7

メソッドを使用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 %>
于 2010-02-26T17:25:38.900 に答える
1

あなたが試すことができます

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

これにより、1つのレコードに空白のフィールドが表示されます。

コントローラでは、関係の複数のレコードを生成できます

 5.times { @user.projects.build }

これにより、ユーザーに関連する5つの新しい空のプロジェクトが作成され、現在のfields_forには新しいレコードのフィールドが含まれます。

于 2010-02-26T16:33:43.610 に答える