结合布尔值的逻辑和一个activerecord模型中的整数

时间:2015-06-16 17:38:39

标签: ruby-on-rails ruby activerecord

假设我有一个名为Product的模型。 Product天数为days_lifetime:integer(初始化后可在1小时,2小时,3小时后到期)。但有时Product具有无限的生命周期(它可以存储很长时间)。所以,我需要添加另一个变量,如unlimited_lifetime:boolean

现在,我有两种方法可以了解Product模型的生命周期:

class Product < AR::Base
  def lifetime
    unlimited_lifetime? ? 100000 : days_lifetime # too big integer
  end

  validates :unlimited_lifetime, absence: true, if: 'days_lifetime.present?'
  validates :unlimited_lifetime, presence: true, if: 'days_lifetime.blank?'
  validates :days_lifetime, absence: true, if: 'unlimited_lifetime.present?'
  validatees :days_lifetime, presence: true, if: 'unlimited_lifetime.blank?'

但这个解决方案很复杂且硬编码。是否有任何软件模式或宝石来简化这种方法?

1 个答案:

答案 0 :(得分:2)

您可以使用现有的days_lifetime列,例如将-1放在具有无限生命期的产品上(我假设0用于过期产品)。