2013-01-07 15 views
0

我有以下設置:協會,加入和示波器

class Program 
    has_many :participants 
end 

class Participant 
    belongs_to :user 
end 

class User 
    has_many :participants 
end 

我想通過這門課的方法和範圍,以返回所有在某個用戶參與的程序。這是我到目前爲止:

def self.where_user_participates(user) 
    Program.joins(:participants).where('participants.user_id' => user.id) 
end 

我相信作品,但我不愛它。我不想談「的ID,但使用的關聯,但我無法得到它的工作,例如:

def self.where_user_participates(user) 
    Program.joins(:participants).where('participants.user' => user) 
end 

我怎麼能提高呢?在Rails 3中,是否真的需要官方的範圍,而類方法是'最佳實踐'?

+0

試試這個'Program.joins(:參與者)。凡(用戶:用戶)' – MrYoshiji

+0

我做到了,它不工作:Hirb錯誤:SQLite3 :: SQLException:no such column:programs.user:SELECT「programs」。* FROM「programs」INNER JOIN「participants」ON「participants」。「program_id」=「programs」。「id」WHERE「programs」。 「user」= 2 – pitosalas

+0

我的不好:'Program.joins(:participants).where(參與者:{user_id:user.id})'我認爲你不能直接傳遞用戶對象。使用範圍來避免:scope:for_user,lambda {| user |加入(:參與者).where(參與者:{user_id:user.try(:id)|| user}'並且像'Program.for_user(user)'一樣使用它,其中變量「user」可以是一個id )或一個用戶對象 – MrYoshiji

回答

2
class Program 
    has_many :participants 
end 

class Participant 
    belongs_to :user 
    belongs_to :program 
end 

class User 
    has_many :participants 
    has_many :programs, :through => :participants 
end 

然後拿到程序調用:

user.programs