Rails - Назначение значений для данных, введенных пользователями в форме модели? - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть модель, статистика, которая имеет 6 статистик для модели персонажа.Пользователи могут вводить значения для Силы, Интеллекта и так далее.То, что я хочу сделать, это автоматически назначить значение для бонуса или штрафа на основе значения, введенного пользователем.Например, если введено 10 или 11, бонус будет 0. Если введено 14 или 15, это будет 2. Любые советы о том, как написать этот метод?Спасибо!


Это очень помогло, но я столкнулся с еще одной загадкой.Я определил это в методе Show в контроллере символов следующим образом:

@con_modifier = @character.statistic.con_modifier

Так что я могу вызвать его из моего представления символов (где отображается большая часть этой информации). У меня есть модель 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

Так что, очевидно, это не таквызывая правильную информацию.Есть идеи?Нужно ли мне также определять его в моем контроллере Fortitude или я могу просто определить его в модели Fortitude и назвать его в представлении таким образом?

1 Ответ

1 голос
/ 16 сентября 2011

Пахнет как 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 Огненный топор рефакторинга кода) позже, если необходимо.

...