构建has_one关联或更新的更好方法(如果存在)

时间:2012-02-01 03:27:00

标签: ruby-on-rails

我的折扣类有一个sales_period。我想编写一个方法,可以在它不存在时构建这个关联,或者在它存在时更新它。目前我正在编写以下条件。

class Discount < ActiveRecord::Base
  has_one :sales_period

  def fetch_period
    end_date = ...
    if sales_period.nil?
      build_sales_period( end: end_date )
    else
      sales_period.end = end_date
    end
  end
end

有没有更好的方法来执行此操作,类似于find_or_create

2 个答案:

答案 0 :(得分:12)

不是你想要的,但你可以稍微缩短它。

def fetch_period
  end_date = ...
  period = sales_period || build_sales_period
  period.end = end_date
end

答案 1 :(得分:0)

find_or_initializefirst_or_initialize类似。例如:

def fetch_period
  end_date = ...
  sales_period.find_or_initialize_by_end(end_date)
end

另外,我要重命名end,这是一个ruby关键字。当某些东西试图eval代码或某些代码时,你可能会得到一些奇怪的错误,这会让你感到非常困惑。