4

の代替品はありupdate_attributeますか?Rails 3でも引き続き使用できますが、非推奨のメッセージが表示されます。

使用する必要がある理由update_attributeは、検証をスキップする必要があるが、コールバックを実行する必要があるためです。

私がこれを行う(そして非推奨のメッセージを避ける)ことを見つけた唯一の方法は、単にコードを以下から抽出することですupdate_attribute

Object.send("#{attribute}=", value)
Object.save(:validate => false)

これを行う別の(適切な)方法があるかどうか知りたいのですが。

ありがとう。

4

3 に答える 3

6

答えがnoであることをお勧めします。

falseに渡してupdate_attributes検証をスキップすることはできません。

update_columnをお勧めしますが、このメソッドはコールバックをスキップします。そして、あなたの質問から判断すると、それはあなたが必要としているものではありません。

アップデート:

そのプレゼンテーションで興味深い表を見つけました。それは私の意見を証明できると思います。

update_(attribute|column)s

この表から判断すると、条件を満たす方法は 1 つだけです。

于 2012-10-17T15:07:52.993 に答える
1

条件付き検証の使用を検討しますか? http://guides.rubyonrails.org/active_record_validations_callbacks.html#conditional-validation

オブジェクトに属性を設定して、現在のレコードに対する問題の検証を無効にすることができます。

于 2012-10-18T18:25:24.563 に答える
0

検証ドキュメントから:

保存時の検証プロセスは、:validate => false を渡すことでスキップできます。検証モジュールが混在している場合、通常の #save メソッドはこれに置き換えられます。これはデフォルトです。

したがって、属性を正​​しい値に設定し、validates パラメータを false に設定して save を呼び出すだけです。メタプログラミングに依存するコードがない限り、 send を使用する必要もありませんが、それはあなたの例からは明らかではありません。

object.attribute = value
object.save(:validate => false)
于 2012-10-17T16:06:33.660 に答える