3

레일에서 ActiveRecord의 find 메소드 중 하나를 호출 할 때 :include 해시 값을 전달하는 몇 가지 예를 보았습니다. 그러나 관계 방법을 통해 이것이 가능한지 여부에 대한 예는 보지 못했습니다. 예를 들어, 다음과 같은 I가 있다고 가정 해 봅시다 :레일에서 N + 1 쿼리 방지

User.find(:all, :include => :favorite) 

그러나 내가 어떤 예 관계의 사용을 보여주는 표시되지 않습니다 :

def User < ActiveRecord::Base 
    has_many :user_favorites 
    has_many :favorites, :through => :user_favorites 
end 

def Favorite < ActiveRecord::Base 
    has_many :user_favorites 
    has_many :users, :through => :user_favorites 
end 

def UserFavorite < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :favorite 
end 

모든 예제는이 같은 쇼 코드를 참조하십시오. 대신이 일을 저에게 할 수 있을까요?

User.favorites(:include => :user) 
+1

요즘 [총알 (https://github.com/ 사용 flyerhzm/bullet). – Barry

답변

6

관계를 클래스 메소드로 사용할 수 없습니다. 인스턴스 메소드입니다. 당신은

@user.favorites 

체크 아웃이 될 것

http://railscasts.com/episodes/22-eager-loading

열망로드에 대한이 스크린 캐스트를 호출 할 수 있습니다

User.find(:all, :include => :favorites) 

또는 레일 3.x를위한

User.includes(:favorites) 
+0

그게'find' 메소드 대신에 관계 메소드를 사용할 수 있는지에 대한 질문에 답하지 못했습니다. –

+1

대답은'You can't'입니다. – fl00r

+0

그건 너무 나쁘지 만, 친절하게도 Rails의 단순함을 상쇄합니다. 정보 주셔서 감사합니다. –