2012-02-16 4 views
2

로그 정보와 함께 다음 코드가 있습니다. global_id 값은after_create 콜백이 올바르게 작동하지 않는 것 같습니다.

이 하나가

코드 작동 attr_accessible로 설정 :

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 

어떤 아이디어 왜이 두 번째가 작동하지 않는 이유는 무엇입니까? 난 당신이 어떤 종류 실패하고 있기 때문에 추측해야한다면

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 

:

들으

편집 # 1 두 모델이있다 검증. 두 번째 SQL 호출로 수행되는 테스트는 email 필드의 고유성을 보장하는 것입니다. 이것이 실패하고 기록을 저장할 수 없다면 어떨까요?

after_create SaveGlobalInfo 

당신은 콜백을 헬퍼 클래스를 만들 수 있지만 내가 전에 실제 액티브 모델로 본 적이 :

특히 홀수이다. 아마도 모듈을 정의한다는 의미일까요?

+2

thx - ActiveRecord가 아마도 복사가 어려웠을 것입니다. Thx가이를 지적했습니다. 업데이트를 올바르게 업데이트하지 못하게하는 업데이트의 암호 유효성 검사가있었습니다. 작동 한 모델의 해당 특정 인스턴스에서 update_attribute를 사용하여 정정되었습니다. 고마워 – timpone

관련 문제