Rails 3 submit a form with multiple records

后端 未结 2 922
夕颜
夕颜 2020-11-29 01:36

I\'m new to rails so this is probably a basic question. I am trying to create a form where the user can create 3 records at once. I want the user to only have to click the

相关标签:
2条回答
  • 2020-11-29 01:50

    You'll need to tell rails its an array. First, read this section of this article:

    For your purpose, you'll need to build the form by hand:

    <%= 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 %>
    
    0 讨论(0)
  • 2020-11-29 02:04

    I would recommend using fields_for for this:

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

    To make this work, you will need to build as many review objects as you require in your controller:

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

    This would create new instances of review records for this user, which is different from new records. Instances are simply Ruby objects. Now because you've called @user.reviews.build three times, you'll see three reviews in your view.

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

    This will create three new Review objects and link them to @user, assuming all three are valid.

    0 讨论(0)
提交回复
热议问题