2012-12-13 4 views
1

"다음"기능을 구현했습니다. "사용자 A가 따라 다니는 사람"을 표시하는 것은 간단했지만 "사용자 A를 따르는 사람들"을 보여주는 것은 문제를 일으 킵니다.Rails 3 ActiveRecord 질문하기

나는 follow_links가 있는데, id, user_id 및 follow_you_id 열이 있습니다. 사용자 A가 사용자 B를 따라 가기 시작할 때 열은 (user_id = A, follow_you_id = B)와 같습니다.

는 단순히

@follow_yous = @user.follow_yous 

을 할 수있는, A (@user는) 다음되는 사용자를 표시하려면하지만 A (@user)을 따르고 있습니다 사용자

으로 표시하는 방법을 잘 모르겠어요 이것을해라, 나는 모든 관련 링크를 처음 발견했다.

@follow_links = FollowLink.where(:follow_you_id => @user.id) 

지금 난 그냥 @follow_mes = @follow_links.users을 할 수 있다고 생각하지만, user 정의되지 않은 방법을 말한다. 그래서 user.follow_yous 또는 follow_you.users에 전화 할 수 있습니다.

내 옆에 접근

@follow_links = FollowLink.where(:follow_you_id => @user.id) 
@follow_mes = User.where(:id => @user.id, :include => @follow_links) 

내가 객체 @follow_links 제공 한 모든 사용자 개체를 찾을 예정 이었지만, 나는 구문이 잘못 생각합니다. 나는 약간의 연구 끝에 괜찮은 해결책을 찾을 수 없었다. 나는 어떤 도움을 주셔서 감사합니다.

업데이트 : FollowLink 모델

belongs_to :user 
    belongs_to :follow_you, :class_name => "User" 
+0

어떻게 생겼어? 거기에는 두 가지 종류의 사용자 (추종자와 팔로어)와의 관계를 설정해야합니다. – Mischa

+0

@ 미샤, 내 업데이트를 확인하십시오. –

+0

내 대답보기. 이 방법이 효과가 있는지 알려주세요. – Mischa

답변

2

당신은이 같은 joins을 사용할 수 있습니다 : 당신의`FollowLink` 모델을 무엇

@users = User.joins(:follow_links).where(:follow_links => { :follow_you_id => @user.id }) 
+0

감사합니다. 이것은 아주 잘 작동합니다. 그래도 나 한테 조금 설명 할 수 있니? 이것은 user.follow_links가 올바른 객체를 호출한다는 것을 의미합니다. 그렇다면 follow_link.users가 어떻게 사용자를 호출하지 않습니까? –

+1

@MaximusS, 왜냐하면'User has_many : follow_links'이지만'FollowLink belongs_to : user'이기 때문입니다. 이것은'follow_link.user'만이 아니라'follow_link.users'가 아니라는 것을 의미합니다. 원하는 정보를 얻으려면 위와 같은 특정 쿼리를 작성해야합니다. ActiveRecord에 의해 out-of-the-box는 지원되지 않습니다. – Mischa

+0

'user.follow_links'는 오직 허용된다는 것을 의미합니까? 나는 더 이상 혼동하지 않는다. 답변 주셔서 감사합니다. –

1

당신은 다음과 같은 사용할 수 있습니다

@follow_links = FollowLink.where(:follow_you_id => @user.id) 
@follow_links.collect(&:user) # :user should be the name of your relation to user in your followlink model 
=> [User1, User2,...] 
+1

이것은 가능하지만 많은 쿼리를 생성합니다. – Mischa