Rails如果为空,则使用其他值

时间:2013-12-13 15:21:01

标签: ruby-on-rails

在我的rails应用程序中,我有一个名为“User”的模型。用户有一个列电子邮件和一列billing_email。当用户创建帐户时,他输入user.email的值。 billing_email列保持为空。

如果“user.billing_email”仍为空,我想在“user.email”中使用。因此,除非用户为其“user.billing_email”输入值,否则将使用“user.email”。

有人能指出我正确的方向吗?并且是放置此类代码的最佳位置?在帮助器内部或在user_model内部?

2 个答案:

答案 0 :(得分:1)

覆盖模型中的getter:

def billing_email
  super.blank? ? email : super
end

但您宁愿使用其他方法名称,或保留相同的名称,但在装饰器中也是如此。

答案 1 :(得分:0)

我建议您创建一个检查billing_email是否存在的新方法,如果存在则返回它,否则默认发送电子邮件。

class User
  def valid_email
    billing_email.presence || email
  end
end

您可以覆盖billing_email

class User
  def billing_email
    read_attribute(:billing_email).presence || email
  end
end

但我通常会避免这种情况,因为它可能会在模型保存或显示时导致一些副作用。

事实上,在某些情况下,如果billing_email为空,您的代码最终可能会存储电子邮件的价值,并重复所有值。

最好使用自定义方法。

相关问题