我有一个模型Statistic,它有一个Character模型的6个统计数据。用户可以输入力量,智力等值。我想要做的是根据用户输入的值自动分配奖金或罚款的值。例如,如果输入10或11,奖励将为0.如果输入14或15,则为2.如何编写此方法的提示?谢谢!
这是一个很大的帮助,但我遇到了另一个障碍。我在Characters控制器中的Show方法中定义了这个:
@con_modifier = @character.statistic.con_modifier
所以我可以从我的角色视图中调用它(显示大部分信息)我已经获得了强韧保存的强韧模型,我想在逻辑中使用con_modifier进行计算总计。如何以这种方式正确调用外国模型?我有:
def total
fortitude_base.to_i + ability.to_i + magic.to_i + misc.to_i
end
我尝试将其更改为:
def total
fortitude_base.to_i + @con_modifier + magic.to_i + misc.to_i
end
但后来我收到了这个错误:
nil can't be coerced into Fixnum
显然,它没有调出正确的信息。有任何想法吗?我是否还需要在Fortitude控制器中定义它,或者我可以在Fortitude模型中简单地定义它并在视图中调用它吗?
答案 0 :(得分:1)
闻起来像D& D.咨询我的旧玩家手册表明属性值n
的修饰符只是(n - 10) / 2
。
所以你只需通过这个简单的公式得到属性值,你就拥有了修饰符。我可能在Attribute类中有一个类方法:
class Attribute
#...
def self.modifier_for(attribute_score)
(attribute_score.to_i - 10) / 2
end
end
然后用这样的东西将它连接到你的播放器:
class Player
#...
def wis_modifier
Attribute.modifier_for(wis)
end
def modifier(attr)
self.send(attr.to_s + '_modifier')
end
end
will_save += p.modifier(:wis)
如果你想要的话,你可能会变得更加漂亮,但简单是一个好的开始,你可以随时让当地的神职人员来治疗你的代码(或者在必要时使用你的+3 Flaming Axe of Code Refactoring)。