使用Ruby on Rails中的标准create方法一次创建多个对象

时间:2015-02-26 06:04:51

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试使用为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个相同的微博对象,而不仅仅是当前的微博对象。

先谢谢你的帮助。

1 个答案:

答案 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

事务块是为了确保所有这些都被保存,或者没有一个被保存,这样你就可以修复你的错误并重新创建它们而不用担心得到任何丢失的保存对象