update_attributesでvalidation_contextを指定するにはどうすればよいですか?validation_context&update_attributes
私は2つの(update_attributesなし)操作使用していることを行うことができます。
my_model.attributes = { :name => '123', :description => '345' }
my_model.save(:context => :some_context)
update_attributesでvalidation_contextを指定するにはどうすればよいですか?validation_context&update_attributes
私は2つの(update_attributesなし)操作使用していることを行うことができます。
my_model.attributes = { :name => '123', :description => '345' }
my_model.save(:context => :some_context)
はここ
def update(attributes)
with_transaction_returning_status do
assign_attributes(attributes)
save
end
end
(update
の別名である)update_attributes
のコードがだ、それを行うための方法はありません見ての通り、save
メソッドに引数を渡すことなく、指定された属性を割り当てて保存するだけです。
これらの操作は、アサイメント内のデータを変更する問題を防ぐために、with_transaction_returning_status
に渡されたブロックに囲まれています。したがって、手動で呼び出すと、これらの操作をより安全に囲みます。
一つの簡単なトリックは、このようなあなたのモデルに文脈依存のパブリックメソッドを追加することです:
def strict_update(attributes)
with_transaction_returning_status do
assign_attributes(attributes)
save(context: :strict)
end
end
あなたは右のあなたのApplicationRecord
(Railsの5内のすべてのモデルの基底クラス)にupdate_with_context
を追加することによって、それを改善することができます。コードは次のようになります:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
# Update attributes with validation context.
# In Rails you can provide a context while you save, for example: `.save(:step1)`, but no way to
# provide a context while you update. This method just adds the way to update with validation
# context.
#
# @param [Hash] attributes to assign
# @param [Symbol] validation context
def update_with_context(attributes, context)
with_transaction_returning_status do
assign_attributes(attributes)
save(context: context)
end
end
end