Ruby on rails 基于关系的定义创建范围

Ruby on rails 基于关系的定义创建范围,ruby-on-rails,ruby,scope,relationship,Ruby On Rails,Ruby,Scope,Relationship,我使用的是Rails 3.0.4和Ruby 1.9.2 我试图创建一个名为role的作用域,它接受一个角色字符串,并返回所有用户记录,这些记录将角色作为其角色之一 问题是User和Role之间存在HABTM关系,我真的不知道如何在常规User.where()语句中访问此信息 这就是我的想法: scope :role, lamda {|role| where {|user| user.role? role} } (role?是我编写的一个方法,它只检查用户是否属于该角色) 有没有一种方法可以像这

我使用的是Rails 3.0.4和Ruby 1.9.2

我试图创建一个名为role的作用域,它接受一个角色字符串,并返回所有
用户
记录,这些记录将
角色
作为其角色之一

问题是
User
Role
之间存在HABTM关系,我真的不知道如何在常规
User.where()
语句中访问此信息

这就是我的想法:

scope :role, lamda {|role| where {|user| user.role? role} }
(role?是我编写的一个方法,它只检查用户是否属于该角色)

有没有一种方法可以像这样从何处传递用户对象?或者完成同样的事情


谢谢。

如果角色只是用户模型中的一个字段:

scope :with_role, lamda{|role_name| where(:role => role_name) }
User.with_role "Member"
如果角色是一个单独的模型并且
用户所属\u:role
。角色还具有标题字段:

scope :with_role, lamda{|role_name| includes(:role).where(:roles => {:title => role_name}) }
User.with_role "Member" # the same usage
UPD 1

如果
用户有多个:角色
您应该使用用户模型方法:

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

角色是一个单独的模型,还是它只是用户表中的一个字段?它是一个单独的模型,具有Has,并且属于多个关系。您传递的参数是什么?角色、头衔?角色名?
scope :with_role, lambda{ |role| joins(:roles).where(:roles => {:name => role}) }