我的折扣类有一个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
?
答案 0 :(得分:12)
不是你想要的,但你可以稍微缩短它。
def fetch_period
end_date = ...
period = sales_period || build_sales_period
period.end = end_date
end
答案 1 :(得分:0)
find_or_initialize
与first_or_initialize类似。例如:
def fetch_period
end_date = ...
sales_period.find_or_initialize_by_end(end_date)
end
另外,我要重命名end
,这是一个ruby关键字。当某些东西试图eval
代码或某些代码时,你可能会得到一些奇怪的错误,这会让你感到非常困惑。