복붙노트

[RUBY-ON-RAILS] (3) 여러 레코드와 양식을 제출 레일

RUBY-ON-RAILS

(3) 여러 레코드와 양식을 제출 레일

이것은 아마 기본 질문 그래서 나는 레일에 새로운 해요. 나는 사용자가 한 번에 3 개 레코드를 만들 수있는 양식을 만들려고하고 있습니다. 한 번만 제출 버튼을 클릭해야 할에 나는 사용자를 원한다. 내 검토 모델에 이름, 코멘트 및 등급을 제출하고있다. 현재, 마지막 레코드가 데이터베이스에 입력됩니다.

<%= form_for([@user,@review]) do |f| %>
<table>
  <tr>
    <td>Rank</td>
    <td>Name</td>
    <td>Comment</td>
  </tr>
  <tr>
    <td>1</td>
    <td><%= f.text_field :name %></td>
    <td><%= f.text_field :comment %></td>
    <%= f.hidden_field :rating, :value=> "5" %>
  </tr>
  <tr>
    <td>2</td>
    <td><%= f.text_field :name %></td>
    <td><%= f.text_field :comment %></td>
    <%= f.hidden_field :rating, :value=> "3" %> 
  </tr>
  <tr>
    <td>3</td>
    <td><%= f.text_field :name %></td>
    <td><%= f.text_field :comment %></td>
    <%= f.hidden_field :rating, :value=> "1" %>
  </tr>
</table>
  <div class="actions">
    <%= f.submit "Create my top 3" %>
  </div>
<% end %>

어떤 조언에 감사드립니다. 감사.

해결법

  1. ==============================

    1.나는 이것에 대한 fields_for 사용하는 것이 좋습니다 것입니다 :

    나는 이것에 대한 fields_for 사용하는 것이 좋습니다 것입니다 :

    <%= form_for([@user, :reviews]) do |f| %>
      <% @reviews.each do |review| %>
        <%= fields_for review do |r| %>
          <%= render "reviews/form", :r => r %>
        <% end %>
      <% end %>
    <% end %>
    

    이 일을하려면, 당신은 당신이 당신의 컨트롤러에 필요한만큼 많은 검토가 객체로 구축해야합니다 :

    def new
      # you could also have this in a before_filter...
      @user = User.find(params[:id])
      @reviews = Array.new(3) { @user.reviews.build }
    end
    

    이 새 레코드와 다른이 사용자에 대한 검토 기록의 새로운 인스턴스를 만들 것입니다. 인스턴스는 단순히 루비 개체입니다. 세 번 user.reviews.build 이제 호출했기 때문에 @, 당신은 당신의 뷰에있는 세 개의 리뷰를 볼 수 있습니다.

    def create
      @user = User.find(params[:id])
    
      @reviews = Review.create(params[:reviews])
      # Some more logic for validating the parameters passed in
    end
    

    이 세 개의 새로운 검토 개체를 만들고 세 가지가 유효 가정 @user로 연결됩니다.

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

    2.당신은 그 배열을 레일 이야기해야합니다. 첫째,이 문서의이 부분을 읽으 :

    당신은 그 배열을 레일 이야기해야합니다. 첫째,이 문서의이 부분을 읽으 :

    당신의 목적을 위해, 당신은 손으로 형태를 구축해야합니다 :

    <%= form_tag 'foo' do %>
      <% [1,3,5].each do |i| %>
        <%= text_field_tag 'review[][name]' %>
        <%= text_field_tag 'review[][comment]' %>
        <%= hidden_field_tag 'review[][rating]', :value => i %>
      <% end %>
    <% end %>
    
  3. from https://stackoverflow.com/questions/4641565/rails-3-submit-a-form-with-multiple-records by cc-by-sa and MIT license