ruby-on-rails Rails:更新多个属性而不进行验证,1个sql事务

cuxqih21  于 2023-02-01  发布在  Ruby
关注(0)|答案(2)|浏览(102)

我知道在Rails中,你可以调用model.update_attribute :foo, 'bar',它只更新数据库中的一个属性,而不验证模型的其余部分,这会导致一个SQL事务。
您还可以使用.update_attributes设置多个属性,但这不能跳过验证。
或者,您可以调用.save( :validate=>false )并更新模型而不进行验证,但是,这将以当前状态保存模型上的所有属性,而不是将其限制在某些列。
我的问题是,有没有办法在一个SQL事务中为一个模型设置多个值,而不是所有的值,并且不触发验证?

pexxcrt2

pexxcrt21#

为什么不直接设置属性,然后用:validate => false调用save呢?

@record.attributes = your_hash # won't nil non-mentioned attributes, as you expect it to
@record.save :validate => false
c6ubokkw

c6ubokkw2#

根据您的需要,可以考虑使用多种方法。您可以设置属性,然后使用validate: false调用save

model.attribute = value
model.other_attribute = other_value
model.save(validate: false)

您也可以使用update_columns,这是写入数据库的最快方式,但请记住,这不仅会跳过验证,还会跳过回调,甚至会跳过更新updated_at

model.update_columns(attribute: value, other_attribute: other_value)

https://apidock.com/rails/ActiveRecord/Persistence/update_columns
根据您的一些评论,assign_attributes听起来可能正是您想要的。这根本不会保存到数据库,但设置属性,以便您可以在表单完成后保存。同样,根据您的具体需要,有许多方法可以使用。
https://api.rubyonrails.org/v6.0/classes/ActiveModel/AttributeAssignment.html#method-i-assign_attributes

相关问题