Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails-验证和更新/创建多个对象_Ruby On Rails_Postgresql_Validation_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails RubyonRails-验证和更新/创建多个对象

Ruby on rails RubyonRails-验证和更新/创建多个对象,ruby-on-rails,postgresql,validation,ruby-on-rails-5,Ruby On Rails,Postgresql,Validation,Ruby On Rails 5,首先,我想做的是——我有一些传入的参数,这些参数对于更新服务器上的对象来说可能相当大(有时大约500个对象的属性可能是正常的) 我的逻辑是这样的: def create_objects(object_attribute_array) errors = [] return if object_attribute_array.blank? # Client ids are generated on clients to help with objects that were

首先,我想做的是——我有一些传入的参数,这些参数对于更新服务器上的对象来说可能相当大(有时大约500个对象的属性可能是正常的)

我的逻辑是这样的:

def create_objects(object_attribute_array)
    errors = []
    return if object_attribute_array.blank?

    # Client ids are generated on clients to help with objects that were actually already created on the server but not returned due to faulty network connections
    incoming_client_ids = object_attribute_array.pluck(:client_id)
    existing_objects = current_user.objects.where(client_id: incoming_client_ids)

    # commit array in transaction - if after_rollback, error panic mode
    object_attribute_array.each do |obj|
      if existing_objects.pluck(:client_id).include?(obj[:client_id])
        # update it conditionally based on update time by changing the incoming object parameters but do not save
      else
        # create, validate, add to transaction
      end
    end
  end
那么,我想做什么(我想?):

从逻辑上讲,我似乎会首先获取现有对象,使用传入参数覆盖任何现有对象信息,但不将对象保存到数据库中。只需验证它,然后将其保存在已验证对象的数组中。 然后,新建并验证未发现的对象,并将其添加到阵列中。从理论上讲,保存数组中的所有对象都会很顺利,因此我应该将其包装在一个事务中,用于一个数据库调用

或者我应该一个接一个地保存数组对象,以便返回单个对象错误,但数据库事务不会回滚到我身上吗


非常感谢您提供的任何帮助,我已经阅读了大量关于事务的书籍,并且熟悉它们的工作原理,但是我没有看到很多关于验证->添加到内存中的数组->持久化的最佳实践。

查看
activerecord导入
库以获取批量插入数据。它还支持验证(
:validate
选项)和更新现有记录(
on\u duplicate\u key\u update
选项)


原理是一样的:您形成一个由
ActiveRecord
对象组成的数组,然后根据相关记录将它们保存在一个或几个查询中。

查看
ActiveRecord导入库以批量插入数据。它还支持验证(
:validate
选项)和更新现有记录(
on\u duplicate\u key\u update
选项)

原理是一样的:您形成一个
ActiveRecord
对象数组,然后根据相关记录将它们持久化到一个或几个查询中