如何在Rails中创建一个从object.attribute调用的方法?

时间:2012-05-20 03:00:51

标签: ruby-on-rails ruby ruby-on-rails-3

我将电话号码保存为phone型号User字段上的国内电话号码。

我做了一个快速的方法将数字转换为国际。

我的问题是如何使这个方法像这样

@user.phone.to_international

而不是我目前的

to_international(@user.phone.to_international,@user.phone.country)

知道怎么做才能做到这一点?

3 个答案:

答案 0 :(得分:2)

这样可行,但不确定after_initialize是否更好

将此添加到您的用户模型

after_find :prepare_phone

private
def prepare_phone
  def phone.to_international
    self.upcase # change with whatever you want. 'self' is the phone attr 
  end
end

答案 1 :(得分:2)

使用to_international方法创建一个名为phone的类,并将用户类中的phone属性设置为手机类的实例。

答案 2 :(得分:0)

Monkey修补String类。在myapp/config/initializers/string_monkey_patches.rb添加:

String.class_eval do
  PHONE_NUMBER_FORMAT = // # some regex matching a phone number
  def to_international
    raise 'Invalid phone number format' unless self.match(PHONE_NUMBER_FORMAT)
    # convert self (the phone number string) to an international number
  end
end