我有一个有手机的型号
手机在数据库中使用特定格式存储。 我想拦截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。还有其他想法吗?
答案 0 :(得分:1)
实际上没有名为find_by_cellphone
的方法,只是ActiveRecord使用Ruby的method_missing
神奇地为你动态地执行此操作。
要执行您想要的操作,只需将find_by_cellphone
定义为Cellphone
类中的类方法,它将使用此方法而不是内置方法:
def self.find_by_cellphone(number)
normalized_number = ... # normalize your number
self.where(:cellphone => normalized_number).first
end