Rails如何检查批量创建是否成功

时间:2018-02-09 05:27:50

标签: ruby-on-rails ruby activerecord mysql2

我正在使用rails方法,我需要创建资源的副本。我正在使用dup。

现在我正在使用save方法保存新副本并将其保存在迭代中:

(User.leads2deals.emails - [@old_inquiry.to_email]).each do |dealer|
                @inquiry = @old_inquiry.dup
                @inquiry.to_email = dealer          
                @inquiry.senttoall = true

                if !@inquiry.save
                    all_saved = false
                end

end

根据all_saved布尔标志,我正在向用户发送正确的消息,如下所示:

    if all_saved

        @old_inquiry.senttoall = true
        @old_inquiry.save

        respond_to do |format|
            format.html {redirect_to @parent, notice: 'All Leads were successfuly sent!'}
        end
    else
        respond_to do |format|
            format.html {redirect_to @parent, notice: 'There was some problems sending all the leads! Try sending one by one'}
        end
    end

我的问题是我想使用批量创建。使用数组,构建对象,最后在对象的数组上调用create以提高效率。

但我想检查任何对象的创建是否失败,在这种情况下,我会将我的布尔标志更改为false,并向用户发出通知,并非所有查询都已保存。

我检查了创建或创建!不返回true / false。在这种情况下,如何检查是否已成功创建所有对象?

2 个答案:

答案 0 :(得分:3)

You can do:

result = Model.create(array)

Then to check if everything was created successfully,

if result.all?(&:persisted?)
  # successful action
else
  # failed action
end

答案 1 :(得分:0)

尝试使用activerecord-import。它支持验证。您需要做的就是检查验证失败时返回的内容,并根据该内容构建响应。