我是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 %>
我需要进行哪些更改才能获得所需的结果? 谢谢!
答案 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)