Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")
これらは両方とも、更新をARに明示的に指示する必要なく、オブジェクトを更新します。
Rails APIは言う:
update_attribute
単一の属性を更新し、通常の検証手順を実行せずにレコードを保存します。これは、既存のレコードのブールフラグに特に役立ちます。検証モジュールが混合されると、Baseの通常のupdate_attributeメソッドがこれに置き換えられます。これはデフォルトです。
update_attributes
渡されたハッシュからすべての属性を更新し、レコードを保存します。オブジェクトが無効な場合、保存は失敗し、falseが返されます。
したがって、オブジェクトを検証したくない場合は、update_attributeを使用する必要があります。before_saveにこのアップデートがあるとどうなりますか?
私の質問は、update_attributeも保存前または検証のみをバイパスするかどうかです。
また、update_attributesにハッシュを渡すための正しい構文は何ですか?一番上の私の例を確認してください。
before_save
コールバック内で設定されているため)。Feの代わりにupdate_attribute(:discount, 0.1) if amount > 100
できるdiscount = 0.1 if amount > 100
。update_attribute
呼び出しsave
文が内部にあることから、この場合には不要であるオブジェクト、上のbefore_save
コールバックと、とにかく保存されます。私はそれが理にかなっていると思います。
update_attribute
内にステートメントを置きたいのbefore_save
ですか?これには理由がありません。