복붙노트

[RUBY-ON-RAILS] 같은 페이지에 여러 개의 비 중첩 모델 생성

RUBY-ON-RAILS

같은 페이지에 여러 개의 비 중첩 모델 생성

다른 안에 중첩되지 않습니다 같은 페이지에 여러 모델을 만들 수있는 방법이 있습니까?

예를 들어, 당신이 사용자를 생성 할 수있는 형태를하고 싶습니다. 이 같은 줄에 표시 두 가지 간단한 필드, 이름과 성을 가지고 있습니다. 나는 (자바 스크립트를 사용하여)를 만들 것이다 후 다시없이 동일한 라인 "새 사용자 추가"링크를 추가 할 수 있도록 좋아하고 나 같은 페이지 제출에게 두 사용자를 생성 할 수있다.

어떻게 그 사용하여 레일을 달성 할 수 있습니까?

해결법

  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
      });
    

    UsersController에서 :

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

    행 tr.new_user_row.hidden는 새로운 라인 템플릿의 목적을 제공 : 버튼 #add_user_form을 클릭함으로써 JS 코드는 템플릿 행을 선택 복제를과의 마지막으로 볼 수있는 행으로 빈 입력을이 새 행을 추가합니다 탁자.

  2. ==============================

    2.여기의 users_controller.rb

    여기의 users_controller.rb

     def new
     end
     def create_multiple
        params[:users].each do |user|
         user = User.create(user)
        end
        redirect_to users_url
      end
    

    여기의 new.html.erb

    <%= form_tag '/users/create_multiple' do %>
    
      <%= render 'user_fields' %>
      <div class="actions">
        <%= submit_tag %>
      </div>
    <% end %>
    

    여기의 _user_fields.html.erb

    <script type="text/javascript">
    $(function() {
            var scntDiv = $('#addusers');
            var i = $('#addusers div').size() + 1;
    
            $('#addfields').on('click', function() {
                    $('<div class="field"><h2>User ' + i +'</h2><input id="users__firstname' + i +'" name="users[][firstname]" placeholder="first name" type="text" /><input id="users__lastname' + i +'" name="users[][lastname]" placeholder="last name" type="text" /></div>').appendTo(scntDiv);
                    i++;
                    return false;
            });
    
    
    });
    
    </script>
    <div id="addusers">
    <div class="field">
     <h2>User 1</h2>
     <%= text_field_tag "users[][firstname]", nil, :placeholder => "first name" %>
     <%= text_field_tag "users[][lastname]", nil, :placeholder => "last name" %>
    </div>
    </div>
    
    <a href="#" id="addfields">Add a New User</a><br/>
    

    로그에 결과

    Started POST "/users/create_multiple" for 127.0.0.1 at 2013-06-05 00:40:07 +0700
    
    Processing by UsersController#create_multiple as HTML
      Parameters: {"utf8"=>"V", "authenticity_token"=>"xOPM6PB1h6DMUEGS7fX9/eWs/e6dg
    XKRj231ReviKFo=", "users"=>[{"firstname"=>"test1", "lastname"=>"last1"}, {"first
    name"=>"test2", "lastname"=>"last2"}], "commit"=>"Save changes"}
      ←[1m←[36m (78.0ms)←[0m  ←[1mbegin transaction←[0m
      ←[1m←[35mSQL (49.0ms)←[0m  INSERT INTO "users" ("created_at", "firstname", "la
    stname", "updated_at") VALUES (?, ?, ?, ?)  [["created_at", Tue, 04 Jun 2013 17:
    40:08 UTC +00:00], ["firstname", "test1"], ["lastname", "last1"], ["updated_at",
     Tue, 04 Jun 2013 17:40:08 UTC +00:00]]
      ←[1m←[36m (7.0ms)←[0m  ←[1mcommit transaction←[0m
      ←[1m←[35m (0.0ms)←[0m  begin transaction
      ←[1m←[36mSQL (3.0ms)←[0m  ←[1mINSERT INTO "users" ("created_at", "firstname",
    "lastname", "updated_at") VALUES (?, ?, ?, ?)←[0m  [["created_at", Tue, 04 Jun 2
    013 17:40:08 UTC +00:00], ["firstname", "test2"], ["lastname", "last2"], ["updat
    ed_at", Tue, 04 Jun 2013 17:40:08 UTC +00:00]]
      ←[1m←[35m (5.0ms)←[0m  commit transaction
    Redirected to http://localhost:3000/users
    Completed 302 Found in 156ms (ActiveRecord: 142.0ms)
    

    현재 여러 레코드 기본-구조에 대한 형태 PARAMS를 전달하는 방법은, 당신의 소원에 따라 유효성 검사 코드를 추가 할 수 있습니다

  3. from https://stackoverflow.com/questions/16919711/multiple-non-nested-model-creation-on-same-page by cc-by-sa and MIT license