Ruby on rails 基于关系的定义创建范围
我使用的是Rails 3.0.4和Ruby 1.9.2 我试图创建一个名为role的作用域,它接受一个角色字符串,并返回所有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?是我编写的一个方法,它只检查用户是否属于该角色) 有没有一种方法可以像这
用户
记录,这些记录将角色
作为其角色之一
问题是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}) }