2012-04-25 18 views
3

私は奇妙なことに遭遇しました。私はモデルGuardianUpdateを持っていて、 "read"というフィールドはブール値です。レコードに対してupdate_attribute(:read、true)を呼び出すと、実際にはレコードが更新されません。ここでRailsのupdate_attributeが保存されていません

は私のコンソール出力です:

1.9.3p0 :026 > g = GuardianUpdate.find(1) 
    GuardianUpdate Load (0.7ms) SELECT `guardian_updates`.* FROM `guardian_updates` WHERE `guardian_updates`.`id` = 1 LIMIT 1 
=> #<GuardianUpdate id: 1, update_id: 2, guardian_id: 11, read: true, created_at: "2012-04-21 04:06:45", updated_at: "2012-04-21 04:06:45"> 
1.9.3p0 :027 > g.update_attribute(:read, false) 
    (0.3ms) BEGIN 
    Update Load (0.4ms) SELECT `updates`.* FROM `updates` WHERE `updates`.`id` = 2 LIMIT 1 
    (0.1ms) COMMIT 
=> true 
1.9.3p0 :028 > g.reload 
    GuardianUpdate Load (0.5ms) SELECT `guardian_updates`.* FROM `guardian_updates` WHERE `guardian_updates`.`id` = 1 LIMIT 1 
=> #<GuardianUpdate id: 1, update_id: 2, guardian_id: 11, read: true, created_at: "2012-04-21 04:06:45", updated_at: "2012-04-21 04:06:45"> 
1.9.3p0 :029 > 

あなたが言うことができるように、どこにもUPDATEのSQL文はありません。 GuaridanUpdateモデル:

class GuardianUpdate < ActiveRecord::Base 
    belongs_to :update 
    belongs_to :guardian 
end 

ご意見はありますか?

私はそのupdate_columnに言及してはならない(:読み取り、真の)動作しますが、全く問題。

+0

'g.update_attributes!(:read => false)'を実行するとどうなりますか? –

+0

何もありません。エラーなし、更新なし...何もありません。 –

答えて

4

belongs_to :updateは、updateアクセサーを作成しています。これは、同じ名前の内部レールメソッドを上書きしています。このメソッドは、既存のオブジェクトへの変更を実際に保存する責任を負うメソッドです。

関連付けの名前を変更してください。大丈夫です。 Railsはこれを警告するためにDangerousAttributeName例外を発生させることになっています。なぜこれが起こっていないのかわからない

+0

これは本当に問題を解決しました! –

関連する問題