我正在尝试使用为Ruby / Rails项目创建的标准create方法,并简单地传入一个额外的表单字段,该字段告诉方法要创建多少对象(而不是创建一个对象)。标准的create方法如下所示:
def create
@micropost = Micropost.new(micropost_params)
respond_to do |format|
if @micropost.save
format.html { redirect_to @micropost, notice: 'Micropost was successfully created.' }
format.json { render :show, status: :created, location: @micropost }
else
format.html { render :new }
format.json { render json: @micropost.errors, status: :unprocessable_entity }
end
end
end
我想传入一个额外的数据(名为number_to_create的表单字段),它告诉方法要创建多少个微博。我刚刚添加了一个像这样的新表单字段,以及其他微博表单字段params:
<%= text_field_tag :number_to_create %>
我的问题是如何修改创建方法代码,使其创建N个微博对象而不是一个。因此,如果我从表单中传入3以及其他微博属性,则该方法会创建3个相同的微博对象,而不仅仅是当前的微博对象。
先谢谢你的帮助。
答案 0 :(得分:1)
你可以使用param作为时间
@microposts = Micropost.transaction do
[].tap do |microposts|
param[:number_to_create].times do
microposts << Micropost.create(micropost_params)
end
end
end
respond_to do |format|
if @microposts.all? &:persisted?
format.html { redirect_to @micropost, notice: 'Micropost was successfully created.' }
format.json { render :show, status: :created, location: @micropost }
else
format.html { render :new }
format.json { render json: @micropost.errors, status: :unprocessable_entity }
end
end
事务块是为了确保所有这些都被保存,或者没有一个被保存,这样你就可以修复你的错误并重新创建它们而不用担心得到任何丢失的保存对象