2014-01-16 1 views
0

В моем текущем проекте Rails у меня есть модель под названием «Ребенок» с двумя параметрами: «choc_cupcake» и «cherry_cupcake».При проверке параметров для модели Rails вы можете проверить значение одного параметра по отношению к другому?

Каждому ребенку должно быть разрешено иметь до 5 кексов в любой комбинации шоколада и/или вишневых кексов. Пока мой код проверки модели позволяет каждому ребенку иметь до 5 шоколадных кексов и до 5 вишневых кексов.

class Child < ActiveRecord::Base 
    validates :choc_cupcake, numericality: { only_integer: true, greater_than_or_equal_to: 0, less_than_or_equal_to: 5 } 
    validates :cherry_cupcake, numericality: { only_integer: true, greater_than_or_equal_to: 0, less_than_or_equal_to: 5 } 
end 

Есть ли способ, чтобы указать, что если ребенок выбирает X шоколадные кексы, то он/она может иметь не более (5-X) черри кексы? Что-то вроде этого, может быть?

validates :cherry_cupcake, numericality: { only_integer: true, greater_than_or_equal_to: 0, less_than_or_equal_to: (5 - :choc_cake) } 

ответ

0
class Child < ActiveRecord::Base 
    validates :choc_cupcake, numericality: { only_integer: true, greater_than_or_equal_to: 0} 
    validates :cherry_cupcake, numericality: { only_integer: true, greater_than_or_equal_to: 0} 
    validate :no_more_than_5_total_cupcakes 

    private 

    def no_more_than_5_total_cupcakes 
    if (choc_cupcake + cherry_cupcake) > 5 
     message = "No more than 5 total cupcakes!" 
     errors.add(choc_cupcake: message) 
     errors.add(cherry_cupcake: message) 
    end 
    end 
end 
+0

Теперь, когда я пытаюсь добавить дочерний объект в консоли рельсы, это дает мне это сообщение: «ArgumentError: Вы должны указать по крайней мере одну проверку» :( – drumwolf

+0

моя вина 'ошибки. .add' не может принимать сразу два атрибута. –

Смежные вопросы