ActiveRecord:如果我覆盖getter方法,如何获取记录列值?

时间:2014-04-23 16:00:54

标签: ruby-on-rails activerecord

我有一个包含3个字段的Users表:guest_email(string), email(string), and guest(boolean)

我想覆盖电子邮件的获取方法,以便在用户是访客时,它会抓取guest_email而不是电子邮件。

我该怎么做?这会导致堆栈溢出,因为它会自行调用:

def email
  self.guest? ? self.guest_email : email
end

在方法内部,我如何获取该特定记录的电子邮件列的值并绕过getter方法?

1 个答案:

答案 0 :(得分:6)

使用read_attribute

def email
  guest? ? guest_email : read_attribute(:email)
end

或者,您可以按照@Stefan的指示使用self[:attribute]

def email
  guest? ? guest_email : self[:email]
end