2014-06-13 2 views
1

내 모델에서 find_by_ 메서드를 재정의하고 싶습니다 ... 그 안에 원래 + 일부 추가 코드를 호출하고 싶습니다.find_by 메서드를 재정의하고 activerecord에서 원본을 호출하는 방법

class User < Activerecord::Base 
    def self.find_by_email(email) 
    binding.pry 
    super.find_by_email(email) || find_by_social_identities_email(email) 
    end 
... 

end 

class User < Activerecord::Base 
    def self.find_by_email(email) 
    super.find_by('email = :email', {email: email}) || find_by_social_identities_email(email) 
    end 
    ... 
end 
+2

정의에서'.where (: email => email) .first' 메소드를 사용할 수 있습니다. –

+0

Ruby Racer의 접근 방식을 사용하십시오. 동적 인 "find_by_ *"메소드는'method_missing'과 관련된 트릭을 사용하기 때문에 일반적인 메소드처럼 작동하지 않습니다. 이것이 아마도 '슈퍼'에서 호출하는 것이 실패하는 이유 일 것입니다. – Sharagoz

+0

find_by _...가 find_by_email 메서드를 처음 만들게됨을 깨달았습니다. 그 안에는 거의 루비 레이서의 제안 인 find_by ('email = : email', {email : email})가 있습니다 ... – Boti

답변

3

마지막으로 나는이 방법을했다. 그러면 다음과 같이됩니다 :

class User < ApplicationRecord 
    def self.find_by_email(email) 
    self.find_by('email = :email', {email: email}) || find_by_social_identities_email(email) 
    end 
    ... 
end 
+0

나는 이것을'find_by (email : email) || find_by_social_identities_email (이메일) ' – bhaity

+0

감사합니다. bhaity :) – Boti

0

가 레일 5의 경우, 내가 self 대신 super를 사용하는 데 필요한 :

관련 문제