rails跳过特定方法的after_find回调

时间:2014-10-30 05:54:46

标签: ruby-on-rails callback

我在执行/选择用户表后使用after_find回调来对手机进行非规范化。

after_find :denormalize_phone

def denormalize_phone
  self.phone = "....."
end

当我尝试创建如下的动态方法时,我遇到了问题。我想跳过此特定块的after_find回调。任何人都可以帮助我吗?

User.order(:state).map(&:state).uniq.each do |state|
  define_singleton_method("is_#{state}_for") do |r|
    ....
  end
end

TX

1 个答案:

答案 0 :(得分:1)

不要使用after_find。说真的,我找不到任何使用after_find的理由。以下是您的选择(从最佳到最差的IMO订购):

  1. 为User对象使用装饰器对象。装饰器用于对模型的表示逻辑进行分组。你可以自己实现它(不是很难)或者gem来实现它。
  2. 使用辅助方法。像format_phone(@user.phone)这样的东西。当然,缺点是你必须到处打电话给他们。
  3. 在用户模型中覆盖phone方法。要获取它的数据库值,您可以使用self [:phone]。这有点乱,因为你将表示逻辑放在数据层中。