我知道在Rails中,你可以调用model.update_attribute :foo, 'bar'
,它只更新数据库中的一个属性,而不验证模型的其余部分,这会导致一个SQL事务。
您还可以使用.update_attributes
设置多个属性,但这不能跳过验证。
或者,您可以调用.save( :validate=>false )
并更新模型而不进行验证,但是,这将以当前状态保存模型上的所有属性,而不是将其限制在某些列。
我的问题是,有没有办法在一个SQL事务中为一个模型设置多个值,而不是所有的值,并且不触发验证?
2条答案
按热度按时间pexxcrt21#
为什么不直接设置属性,然后用
:validate => false
调用save
呢?c6ubokkw2#
根据您的需要,可以考虑使用多种方法。您可以设置属性,然后使用
validate: false
调用save
您也可以使用
update_columns
,这是写入数据库的最快方式,但请记住,这不仅会跳过验证,还会跳过回调,甚至会跳过更新updated_at
。https://apidock.com/rails/ActiveRecord/Persistence/update_columns
根据您的一些评论,
assign_attributes
听起来可能正是您想要的。这根本不会保存到数据库,但设置属性,以便您可以在表单完成后保存。同样,根据您的具体需要,有许多方法可以使用。https://api.rubyonrails.org/v6.0/classes/ActiveModel/AttributeAssignment.html#method-i-assign_attributes