2012-02-16 13 views
2

ログ情報に次のコードがあります。after_createコールバックが正しく動作していないようです。

Location.update(model[:id],:global_id => gi[:id]) 

ログ

before location save 
    Location Load (0.3ms) SELECT `locations`.* FROM `locations` WHERE `locations`.`id` = 280 LIMIT 1 
(0.3ms) UPDATE `locations` SET `global_id` = 11490, `updated_at` = '2012-02-16 04:48:17' WHERE `locations`.`id` = 280 
after location save 

この1つは、私がなぜわからないしない:global_id値は、この1つは

コードを作品

をattr_accessibleするように設定されています。任意のアイデア:

コード:

User.update(model[:id],:global_id => gi[:id]) 

ログ:

here is more info 
here i am and I am a user 
User Load (0.3ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 31 LIMIT 1 
    (0.3ms) SELECT 1 FROM `users` WHERE (`users`.`email` = BINARY '[email protected]' AND `users`.`id` != 31) LIMIT 1 
after my user update 

この第二のいずれかが動作しない理由を任意のアイデア?私はあなたには、いくつかの種類が失敗しているからだと推測していた場合は

class SaveGlobalInfo < ActiveRecord::Base 
    def self.after_create(model) 
    gi=GlobalIdentification.create() 
    if (model.class.name=='Location') 
     puts "before location save" 
     Location.update(model[:id],:global_id => gi[:id]) 
     puts "after location save" 
    elsif (model.class.name=='User') 
     puts "here i am and I am a user" 
     User.update(model[:id],:global_id => gi[:id]) 
     puts "after my user update" 
    end 
+0

上記の編集#1に追加されたものは、何が起こっているのかわかりません – timpone

答えて

3

:そのクラスのビーイングで

after_create SaveGlobalInfo 

THX

編集#1 どちらのモデルはこれを持っています検証の2番目のSQL呼び出しで実行されるテストは、emailフィールドの一意性を保証することです。これが失敗してレコードが保存できない場合はどうなりますか?

これは特に奇妙です:

after_create SaveGlobalInfo 

あなたは、コールバックのためのヘルパークラスを作成することができますが、私は前に実際のActiveRecordモデルとしてそれらを見たことがありません。おそらく、モジュールを定義することを意味しますか?

+2

thx - ActiveRecordはおそらくコピーしていませんでした。それを指摘するためのThx。更新プログラムでパスワードの検証が行われ、正しく更新されませんでした。働いていたモデルの特定のインスタンスに対してupdate_attributeを使用して整理されました。どうも – timpone

関連する問題