2011-02-22 94 views
2

我用Rails 3.0.4和Ruby 1.9.2創建基於關閉的關係

我試圖創建一個名爲作用範圍這需要一個角色字符串,並返回所有的User記錄的範圍有role作爲他們的角色之一。

問題是UserRole有一個HABTM關係,我真的不知道如何在常規User.where()語句中訪問此信息。

這是我在想什麼:

scope :role, lamda {|role| where {|user| user.role? role} } 

(角色的方法我寫的只是檢查,如果一個用戶屬於角色?)

有沒有辦法通過用戶這樣的對象從哪裏來?或者是完成相同事情的東西?

謝謝。

+0

角色是一個單獨的模型,還是隻是Users表中的一個字段? – fl00r

+0

這是一個單獨的模型與一個Has並且屬於Many關係。 –

回答

3

如果作用僅僅是在用戶模型中的場:

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 

=> User.with_role( 「會員」)

或使用範圍:

scope :with_role, lambda{ |role| joins(:roles).where(:roles => {:name => role}) } 
+0

我的模特有很多角色。如何與':roles'一起工作? –

+0

你傳遞了​​什麼論點? Role.title? Role.name? – fl00r

+0

它有一個Role.name –