2012-02-16 23 views
2

我有以下代碼與日誌信息。該global_id值設置爲attr_accessibleafter_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 

這一個不,我不知道爲什麼。任何想法:

代碼:

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 

任何想法,爲什麼這第二個沒有工作?

THX

編輯#1 兩種型號都有這樣的:

after_create SaveGlobalInfo 

與class是:

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 2012-02-16 05:13:55

回答

3

如果我猜那是因爲你沒有某種的驗證。使用第二次SQL調用執行的測試是爲了確保您的email字段的唯一性。如果失敗並且記錄無法保存會怎麼樣?

這是特別奇怪的:

after_create SaveGlobalInfo 

可以回調創建輔助類,但我從來沒有見過他們的實際ActiveRecord的模型。也許你的意思是定義一個模塊?

+2

thx - ActiveRecord可能從複製蠕變。 Thx指出了。對更新進行了密碼驗證,導致其無法正確更新。通過在該模型的特定實例上使用update_attribute來改變。謝謝 – timpone 2012-02-16 21:29:57

相關問題