ruby条件验证has_and_belong_to_many

时间:2013-05-09 20:21:43

标签: ruby-on-rails validation

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

在角色模型中:

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

2 个答案:

答案 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