0

キャラクターモデルの6つの統計を持つモデルStatisticがあります。ユーザーは、Strength、Intelligenceなどの値を入力できます。私がやりたいのは、ユーザーが入力した値に基づいて、ボーナスまたはペナルティの値を自動的に割り当てることです。たとえば、10または11を入力すると、ボーナスは0になります。14または15を入力すると、2になります。このメソッドの書き方に関するヒントはありますか?ありがとう!


これは大きな助けになりましたが、私は別の問題にぶつかりました。これは、CharactersコントローラーのShowメソッドで次のように定義しました。

@con_modifier = @character.statistic.con_modifier

キャラクタービュー(この情報のほとんどが表示されている)から呼び出すことができます。Fortitudeの保存用のFortitudeモデルがあり、ロジックで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

したがって、明らかに正しい情報を呼び出していません。何か案は?Fortitudesコントローラーでも定義する必要がありますか、それともFortitudeモデルで定義して、そのようにビューで呼び出すことができますか?

4

1 に答える 1

1

D&Dの匂いがします。私の古い Player's Handbook を参照すると、 の属性値の修飾子nは単に(n - 10) / 2.

したがって、その単純な式を使用して属性値を取得するだけで、修飾子が得られます。私はおそらく Attribute クラスにクラスメソッドを持っているでしょう:

class Attribute
    #...
    def self.modifier_for(attribute_score)
        (attribute_score.to_i - 10) / 2
    end
end

そして、次のような方法でそれを Player に接続します。

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 を使用します)。

于 2011-09-16T02:17:20.710 に答える