2013-01-07 2 views
0

나는 다음과 같은 설정이있다. 여기에 내가 지금까지 가지고있는 것이있다 :협회, 조인 및 스코프

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

나는 그것이 효과가 있다고 생각하지만 나는 그것에 익숙하지 않다. 예컨대 :

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

어떻게이를 향상시킬 수 있습니다, 나는 아이디의 '에 대해 이야기하지만 연결을 사용하지 선호하지만, 나는 그것이 동작하지 않습니다 수 있을까? 그리고 공식적인 범위가 필요 없으며 클래스 메소드가 Rails 3에서 '베스트 프랙티스'라는 것이 사실입니까?

+0

이'Program.joins 시도 (사용자 : 사용자)' – MrYoshiji

+0

는 내가 그랬어, 그것은 작동하지 않았다 Hirb 오류 : SQLite3 :: SQLException : 해당 열 없음 : programs.user : SELECT "programs". * FROM "programs"INNER JOIN "participants" "참여자". "program_id"= "프로그램". "id" "프로그램". "user"= 2 – pitosalas

+0

나쁘다 :'Program.joins (: participants) .where (참가자 : {user_id : user.id})'나는 사용자 객체를 직접 전달할 수 있다고 생각하지 않는다. 범위를 사용하여 다음을 피하십시오 :'scope : for_user, lambda {| user | (사용자 : {user_id : user.try (: id) || 사용자}''Program.for_user (user)'와 같이 사용하십시오. 여기서 "user"변수는 id (정수)) 또는 User 객체 – 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