我有两个模型,用户和角色,
在角色模型中:
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是一个单独的表,所以用户的任何内容都不会更新,因此不会使用用户验证。 任何想法如何解决这个问题并让用户进入数据库的任何内容都有效?
答案 0 :(得分:1)
正如您所说,在保存HABTM链接之前,您无法通过HABTM关系访问记录。您可以做的是使用after_save回调来验证相关记录,并在任何验证失败时回滚事务。
请参阅http://mattberther.com/2012/09/09/validating-habtm-relationships-with-rails-3x
答案 1 :(得分:0)
您可能想要使用
gem 'rolify'
gem 'cancan'
https://github.com/EppO/rolify
https://github.com/ryanb/cancan
使用这些Gems,可以很容易地处理用户模型中的角色。
康康的作者Ryan Bates对这个问题有一个很棒的截屏视频: http://railscasts.com/episodes/192-authorization-with-cancan