11

別のページにネストされていない複数のモデルを同じページに作成する方法はありますか?

たとえば、ユーザーを作成できるフォームが欲しいです。これには、同じ行に表示される 2 つの単純なフィールド (firstname と last name) があります。「新しいユーザーを追加」というリンクを追加して、(javascript を使用して) ポストバックなしで同一の行を作成し、同じページの送信で 2 人のユーザーを作成できるようにしたいと考えています。

レールを使用してそれを達成するにはどうすればよいですか?

4

2 に答える 2

8

フィールドを追加し、1 つのフォームと 1 つの送信ボタンのみを保持します。

= form_tag(url: create_user_path, remote: true) do
  %table
    %tr
      %td= text_field_tag 'user[][first_name]'
      %td= text_field_tag 'user[][last_name]'

    %tr.actions
      %td= submit_tag 'Save'
      %td= button_tag 'Add new user form', id: 'add_user_form'

    %tr.new_user_row.hidden # hidden class matches the css rule: {display:none;}
      %td= text_field_tag "user[][first_name]"
      %td= text_field_tag "user[][last_name]"

:javascript # jQuery
  $('#add_user_form').bind('click', function(e) {
    var row = $('tr.new_user_row').clone().removeClass('hidden new_user_row');
    $('tr.actions').before(row); # will append the <tr> before the actions
  });

ユーザーコントローラーで:

def create
  params[:user].each do |attr|
    User.create(attr)
  end
end

tr.new_user_row.hiddenは、新しい行のテンプレートの目的を果たします。ボタンをクリックする#add_user_formと、JS コードはテンプレート行を選択し、clone空の入力を含むこの新しい行をテーブルの最後の表示行として追加します。

于 2013-06-04T14:16:57.453 に答える