Rails: Как установить разные ": message" для каждой из возможных ошибок? - PullRequest
2 голосов
/ 17 декабря 2010

Я использую эту проверку:

validates_numericality_of :price, :greater_than_or_equal_to => 0, :less_than => 1000000

Как я могу установить разные :message для каждого из следующих случаев?

  • price <0 </li>
  • price> = 1000000

Ответы [ 4 ]

3 голосов
/ 17 декабря 2010

Предполагая, что вы используете Rails 3, у вас есть еще один вариант - создать собственный валидатор:

# You can put this in lib/better_numericality_validator.rb
class BetterNumericalityValidator < ActiveModel::EachValidator
    def validate_each(record,attribute,value)
        if value < 0
            record.errors[attribute] << "must be greater than or equal to 0"
        elsif value >= 1000000
            record.errors[attribute] << "must be less than 1000000")
        end
    end
end

Тогда вы можете использовать свой собственный валидатор в вашей модели:

# In your model.rb
validates :price, :better_numericality => true

Этот метод очень похож на ответ Анубхоу. Но использование логики в пользовательском валидаторе позволяет легко повторно использовать валидацию в другом месте, легко тестировать валидатор по отдельности, и я лично считаю, что validates :price, :better_numericality => true делает вашу модель более чистой, чем альтернатива.

3 голосов
/ 17 декабря 2010

Вы можете использовать следующее в модели

1 голос
/ 17 декабря 2010

Как насчет:

validates_numericality_of :price, :greater_than_or_equal_to => 0, :message => "Foo"
validates_numericality_of :price, :less_than => 1000000, :message => "Bar"

Я не проверял, но он должен работать?С другой стороны, вопрос Анубхоу - хороший запасной вариант.

0 голосов
/ 17 декабря 2010

В какой-то момент вы, вероятно, должны спросить себя, не пора ли применить какое-то соглашение к конфигурации.

По моему мнению, сообщение об ошибке типа «Пожалуйста, введите действительную цену больше 0 и меньше 1 миллиона» (или аналогичную) является совершенно верным решением проблемы Он не позволяет добавлять ненужную сложность вашему приложению и позволяет переходить к другим (предположительно более важным) функциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...