Rails - 为用户以模型形式输入的数据分配值?

时间:2011-09-16 01:27:18

标签: ruby-on-rails methods model fixnum

我有一个模型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模型中简单地定义它并在视图中调用它吗?

1 个答案:

答案 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)。