2013-05-09 8 views
0

Я имею две модели, пользователи и роль,рубин условной проверка has_and_belong_to_many

в ролевой модели:

has_and_belongs_to_many :users 

В модели пользователя,

has_and_belongs_to_many :roles 
validates_presence_of :name, :if => "roles.map(&:name).include?(\"manager\")" 

Моя проблема заключается в том, что я могу добавьте роль «менеджера» в роли пользователя, и он пройдет. В консоли, когда я звоню

sampleUser.roles << managerRole 

Он идет полным ходом и сохраняет в дБ. когда я называю

sampleUser.valid? 

я получаю ложный,

Я понимаю, что из-за roles_users отдельной таблицы, ничего от пользователя не получать обновляются, поэтому не будут использоваться валидация пользователя. Любая идея, как обойти эту проблему и заставить пользователя все, что попадает в db, действительно?

ответ

1

Как вы говорите, вы не можете получить доступ к записи через отношения HABTM до связи HABTM сохраняются. Что вы можете сделать, это использовать обратный вызов after_save для проверки связанных записей и отката транзакции, если какие-либо проверки не выполняются.

См. http://mattberther.com/2012/09/09/validating-habtm-relationships-with-rails-3x

0

Вы можете использовать

gem 'rolify' 
gem 'cancan' 

https://github.com/EppO/rolify

https://github.com/ryanb/cancan

С этими самоцветами он очень прост в обращении ролей в пользовательских моделей.

Ryan Bates, автор канкан, имеет удивительный скринкаст об этом вопросе: http://railscasts.com/episodes/192-authorization-with-cancan