0

我需要有关单表继承 (STI) 和初始化继承模型的默认值的帮助。

例如,我有 Omnivore、Herbivore 和 Herbivore 模型,它们继承自 Player,而 Player 继承自 User。

通过 STI,所有模型都有 lvl、xp、hp、ap 和 max_xp、max_hp 和 max_ap。

通过数据库,所有值默认为 0 或 1。 (:users, :xp, :integer, default: 0)

但我想做的是为每个类的实例初始化不同的值。例如,每个新的 Carnivore 对象将具有 LVL:1 XP:0/50,HP:5/5,AP:3/3 的设置值,而 Herbivore 将具有 LVL:1 XP:0/50,HP:3/3 ,AP:5/5,草食动物 LVL:1 XP:0/50,AP/HP:4/4。

此外,当 xp 值超过 max_xp 时,lvl 将增加。就像是

when xp > max_hp 
 lvl += 1
end

或者

xp = 70

lvl = case xp
  when 0..40 then 1
  when 41..60 then 2
  when 61..70 then 3
  when 71..100 then 4
  else "Overpowered"
end

where do I put this?

你会如何处理这两个问题?

我认为这样的事情可能适用于初始化值

def initialize
  @xp = 100
end

但这不起作用,而是将@xp 设置为nil。任何帮助将不胜感激!

4

1 回答 1

0

您可以在模型的 before_save 回调中设置值。

于 2013-03-15T05:13:23.013 回答