我正在使用Rails 3.0.4和Ruby 1.9.2
我正在尝试创建一个名为role的作用域,该作用域接受一个角色字符串,并返回User
作为其中一个角色的所有role
条记录。
问题是User
和Role
有HABTM关系,我真的不知道如何在常规User.where()
语句中访问此信息。
这就是我的想法:
scope :role, lamda {|role| where {|user| user.role? role} }
(角色?是我编写的一种方法,只检查用户是否属于该角色)
有没有办法从那里传递用户对象?还是能完成同样事情的东西?
谢谢。
答案 0 :(得分:3)
如果role只是用户模型中的一个字段:
scope :with_role, lamda{|role_name| where(:role => role_name) }
User.with_role "Member"
如果角色是单独的模型而User belongs_to :role
。角色也有标题字段:
scope :with_role, lamda{|role_name| includes(:role).where(:roles => {:title => role_name}) }
User.with_role "Member" # the same usage
UPD 1
如果User has_many :roles
您应该使用用户模型方法:
class User < ActiveRecord::Base
has_many :roles
def self.with_role(role_name)
Role.where(:name => role_name).first.users # hope title is validated uniq
end
end
=&GT; User.with_role( “成员”)
或使用范围:
scope :with_role, lambda{ |role| joins(:roles).where(:roles => {:name => role}) }