Rails:如何让用户输入定义记录到数据库中的条目有多少?

时间:2019-01-31 04:55:39

标签: mysql ruby-on-rails

我是Rails的新手。我正在开发一个Web应用程序,用户可以在其中插入鞋子清单。因此,用户输入样式代码,尺寸,价格和数量。我要数量来定义数据库中有多少个条目。因此,如果数量为三,则将为每只鞋分别创建三行。当前,每个提交的表单都会在数据库中创建一行。

我在shoe_controller中创建的内容:

def create
    @shoe = Shoe.new(shoe_params)
    respond_to do |format|
      if @shoe.save
        format.html { redirect_to @shoe, notice: 'Shoe was successfully created.' }
        format.json { render :show, status: :created, location: @shoe }
      else
        format.html { render :new }
        format.json { render json: @shoe.errors, status: :unprocessable_entity }
      end
    end
  end

我的_form.html.erb

<%= form_with(model: shoe, local: true) do |form| %>
  <% if shoe.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(shoe.errors.count, "error") %> prohibited this shoe from being saved:</h2>

      <ul>
      <% shoe.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :sku %>
    <%= form.text_field :sku %>
  </div>

  <div class="field">
    <%= form.label :size %>
    <%= form.text_field :size %>
  </div>

  <div class="field">
    <%= form.label :quantity %>
    <%= form.number_field :quantity %>
  </div>

  <div class="field">
    <%= form.label :price %>
    <%= form.text_field :price %>
  </div>



  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

我需要进行哪些更改才能获得所需的结果? 谢谢!

2 个答案:

答案 0 :(得分:1)

@rohit是正确的,因为使用Shoe.create方法将为您提供所需的东西。但是要实现此目的,您可以将控制器更改为以下内容。我敢肯定有很多更干净的方法可以做到这一点,但这应该为您提供所需的信息。另外,我建议验证shoe_params中的数量是一个正整数。

def create
 @show = Show.new(shoe_params)

 # This will create an array of shoes from your params
 new_shoes = (1..shoe_params[:quantity]).collect { Shoe.new(shoe_params) }

 # Save each record and put the result in an array
 success = new_shoes.map(&:save)

 if success.all?
  # all records saved
 else
  # maybe @shoe.valid? is false or something else happened
 end
end

答案 1 :(得分:0)

您可以使用ActiveRecord::Persistence#create,它可以接受一组哈希作为参数。

假设数量为3,则建立3个新的哈希,其中将包含您的记录。

  shoes_params = [
    {
      code: 1,
      size: 8,
      price: 300,
      quantity: 1
    },
    {
      code: 1,
      size: 8,
      price: 300,
      quantity: 1
    }, ...
  ]


Shoe.create(shoes_params)