repeat_purchases_percent是我的Category模型中的一个方法。保证所有无父类别都具有数据库中future_purchases_percent的值。子类别可能有也可能没有future_purchases_percent。如果他们这样做,我想使用那个价值。如果没有,我想使用父的值等等。
我尝试了一种递归方法。
def future_purchases_percent
if self.future_purchases_percent.nil?
Category.find(self.parent_id).future_purchases_percent
else
future_purchases_percent
end
end
这会陷入不断评估的循环中:
if self.future_purchases_percent.nil?
我怎样才能正确实现这种方法?
答案 0 :(得分:5)
a || b
表达式。 belongs_to :parent, :foreign_key => 'parent_id', :class_name => :Category
。现在,一切就绪后,您可以编写真正的声明性代码:
def safe_future_purchases_percent
future_purchases_percent || parent.safe_future_purchases_percent
end
答案 1 :(得分:0)
def repeat_purchases_percent
if self.future_purchases_percent.nil?
Category.find(self.parent_id).repeat_purchases_percent
else
future_purchases_percent
end
end
基本上你的问题是你的方法命名方法与字段相同,然后立即调用它。你应该像你说repeat_purchases_percent
那样命名方法,并且只在future_purchases_percent
为零时才递归到它。