2012-01-22 8 views
0

携帯電話を持つモデルがありますインターセプトfind_by_attributeメソッドアクティブレコード

携帯電話はデータベースに特定の形式を使用して保存されています。 私はUser.find_by_cellphone( "1234567890")を傍受して携帯電話を正規化してから、 "本物の" find_by_cellphone( "123-456-7890")を呼び出したいと思います。

どうすればいいですか? find_by_cellphoneの名前をar_find_by_cellphoneに変更し、find_by_cellphoneを上書きしてar_find_by_cellphoneを呼び出してみようと考えていました。他のアイデア?

答えて

1

実際にはfind_by_cellphoneという名前のメソッドはありませんが、これは魔法のようにRubyのmethod_missingを動的に使用するActiveRecordです。

は、あなたが、自分の Cellphoneクラスのクラスメソッドとして find_by_cellphoneを定義やりたいと、それは内蔵の1のではなく、これを使用します:私のalias_method_chainが働いていなかった理由です

def self.find_by_cellphone(number) 
    normalized_number = ... # normalize your number 
    self.where(:cellphone => normalized_number).first 
end 
+0

いまいましいRIGH 、ありがとう! – daniel

+0

find_by_cellphone => self.where(...)が1つ訂正されました。最初に – daniel

+0

おっと、それを逃しました。更新しました。 –

関連する問題