2010-05-10 5 views
0

레일 2.3.5에서 루비를 사용하고 있습니다.런타임시 after_save 콜백을 만드는 방법

사용자 인스턴스가 있습니다. 런타임에 특정 조건에 따라이 인스턴스에 대해 after_save 콜백을 추가하려고합니다.

다른 문제는이 after_save가 블록 또는 proc 매개 변수를 사용해야한다는 것입니다.

내가 원하는 것은 이와 같습니다. 이것은 가짜 코드입니다.

사용자 = User.first

PROC = Proc.new는 끝

user.after_save의 PROC

+1

이 가장 쉬운 방법은 항상 인스턴스 변수 경우 확인 되돌려 after_save 전화를 가지고 아마 실행 전에 true 또는 false입니다. 네가하려는 일을 좀 더 구체적으로 할 수 있다면 나는 그 예를 제시 할 수있다. –

답변

0

이것은 내가 어떻게 할 것입니다 풋 '이 foo는이'않습니다. 모델에서 나는 것 :

attr_accessor :after_save_callback 

after_save { |record| 
    record.after_save_callback.call unless record.after_save_callback.nil? 
} 

이벤트를 바인딩 뭔가처럼 될 수있는 반면 :

user = User.first 
user.after_save_callback = Proc.new { "actual code" } 
+0

감사하지만 더 투명한 솔루션을 찾고 있습니다. 모델 클래스는 변경할 수 없습니다. –

0
@user = User.first 

eigen = class << @user; self; end 
eigen.after_save do 
    puts @user.email 
end 

@user.save 
# prints user.email 


@another = User.find(100) 
@another.save 
# does not print user.email 
+0

슬프게도, 이것은 작동하지 않습니다. 3.2 어쨌든 아닙니다. – iHiD

관련 문제