0

我有两个模型,用户和角色,

在榜样:

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 是一个单独的表,所以用户上的任何内容都没有更新,因此不会使用用户验证。知道如何解决这个问题并使用户进入数据库的任何内容都是有效的吗?

4

2 回答 2

1

正如您所说,在保存 HABTM 链接之前,您无法通过 HABTM 关系访问记录。您可以做的是使用 after_save 回调来验证关联的记录并在任何验证失败时回滚事务。

请参阅http://mattberther.com/2012/09/09/validating-habtm-relationships-with-rails-3x

于 2013-05-09T23:25:21.470 回答
0

您可能想使用

gem 'rolify'
gem 'cancan'

https://github.com/EppO/rolify

https://github.com/ryanb/cancan

使用这些 Gem,在用户模型中处理角色非常容易。

cancan 的作者 Ryan Bates 有一个关于这个问题的精彩截屏: http ://railscasts.com/episodes/192-authorization-with-cancan

于 2013-05-09T21:58:08.327 回答