Rails: Как позволить пользовательскому вводу определить, сколько записей записано в базу данных? - PullRequest
0 голосов
/ 31 января 2019

Я новичок в Rails.Я занимаюсь разработкой веб-приложения, в которое пользователь вставляет инвентарь обуви.Таким образом, пользователь вводит код стиля, размер, цену и количество.Я хочу, чтобы количество определяло, сколько записей в базе данных.Таким образом, если количество равно трем, для каждой обуви будет создано три отдельных ряда.В настоящее время каждая отправка формы создает одну строку в базе данных.

Мое создание в моем 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

My _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 голосов
/ 31 января 2019

@ 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
0 голосов
/ 31 января 2019

вы можете использовать ActiveRecord::Persistence#create, который может принимать массив хэшей в качестве параметра.

Предположим, количество равно трем, поэтому создайте 3 новых хэша, которые будут содержать ваши записи.

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


Shoe.create(shoes_params)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...