Перехватить активную запись метода find_by_attribute - PullRequest
0 голосов
/ 22 января 2012

У меня есть модель с мобильным телефоном

Сотовые телефоны хранятся в базе данных определенного формата. Я хотел бы перехватить 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 Ответ

1 голос
/ 22 января 2012

На самом деле нет метода с именем find_by_cellphone, это просто ActiveRecord, магически использующий Ruby's method_missing, чтобы динамически сделать это за вас.

Чтобы сделать то, что вы хотите, просто определите find_by_cellphone какметод класса в вашем Cellphone классе, и он будет использовать его вместо встроенного:

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