2011-01-03 2 views
2

Я хочу создать несколько валидаций для одной из моих моделей, которые содержат информацию о местоположении (улица, местность, почтовый_код и т. Д.). Я хочу иметь возможность изменять правила проверки на основе выбранной страны.Проверка динамической модели

Например, правила проверки почтового индекса будут отличаться для США & Канада. Кроме того, в некоторых странах нет почтовых_кодов, поэтому правила проверки не нужны.

Как я могу реализовать что-то подобное?

ответ

6

Поместите это в свою модель для запуска любой пользовательской логики для проверки.

validate :location_should_be_valid 

def location_should_be_valid 

    # run all your custom logic here 

    # if it isn't valid, add an error indicating why 
    if country == "Canada" 
    errors.add(:postal_code, "Invalid postal code for Canada") if postal_code.length != 7 
    end 
end 

Подробнее об этом в Rails Guides:
http://guides.rubyonrails.org/active_record_validations_callbacks.html#creating-custom-validation-methods

+0

Как получить доступ к моему значению формы внутри location_should_be_valid? –

+0

Они будут храниться в обычных переменных модели. Это будет вызываться после того, как значения будут заполнены, но до сохранения значений. Я изменил ответ, чтобы привести пример этого. – dontangg

1
validates :postal_code, :presence => true, :if => :check_country 

def check_country 
    ["US", "Canada"].include?(self.country) 
end 
+0

Это более подходящий подход –

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