2011-12-02 4 views
0

У меня есть 2 модели с столами для соединения (bowsers_profiles). (HABTM), т.е.Rails HABTM checkbox validation

model Profile 
    has_and_belongs_to_many :browsers 
end 

model Browser 
    has_and_belongs_to_many :profiles 
end 

При сохранении профиля пользователь может выбрать, какие браузеры они используют. Как я могу проверить его, чтобы пользователь мог выбрать хотя бы один браузер. Будет ли валидация принадлежать профилю. Думаю, это будет?

Может ли кто-нибудь пролить свет на то, как этого достичь.

Спасибо, если вы можете.

+0

Вы нашли решение? – Preacher

+0

Привет проповедника. Это не сработало, что вы предложили. – Lee

ответ

0

Все, что мне нужно было сделать подсчет элементов массива для HABTM полей т.е.

def must_have_at_least_one_browser 
    errors.add(:base, 'You must select at least one browser') unless browser_ids.count > 0 
    end 

Простое решение в конце концов, ,

0

Я бы поместил его в модель, которая соответствует контроллеру, который содержит действие, в котором вы выбираете отношения. Например, если вы выбрали браузеры в действиях profile#new и/или profile#edit, я бы поместил проверку в модель профиля.

Вот код, если поместить его в своем профиле модели:

validate :must_have_at_least_one_browser 

private 

    def must_have_at_least_one_browser 
    if browsers.blank? 
     errors.add(:base, 'You must select at least one browser') 
    end 
    end