2010-07-29 3 views
0

Ruby on 2.3.8에서 작업 중이며 사용자를 따라갈 수있는 기능을 만들고 싶습니다. 각각의 모델, 사용자다음 :사용자 로직을 따름

이를 위해

, 나는 2 개 테이블을 만든

class User < ActiveRecord::Base 
    has_and_belongs_to_many :followings, :foreign_key => "follower_id" 
end 

class Following < ActiveRecord::Base 
    has_and_belongs_to_many :users, :foreign_key => "follower_id", :class_name => "User" 
end 

을 지금, 나는이 유효한 CURRENT_USER와 (current_user.followings.all을 실행하려고 할 때의 코스), 그것은 나를 다음과 같은 예외를 throw합니다 :

'followings_users' doesn't exist: SELECT 'followings'.* FROM `followings` INNER JOIN 'followings_users' ON 'followings'.id = 'followings_users'.following_id WHERE ('followings_users'.follower_id = 1) 

나는이 작업을 수행 할 수 없습니다. 내가 왜 "follows_users"테이블을 요구하는지 모르겠다. 내가 단지 "팔로 잉"이라고 부르기를 원한다면?

내가 뭘 잘못하고 있니?

답변

1

habtm을 사용하면 Rails는 조인 테이블에서 연결을 가져 오려고 시도합니다. 두 개의 이름 (followings_users)을 결합하여 테이블 이름을 추측하려고 시도하거나 옵션 이름으로 테이블 이름을 지정할 수 있습니다. 그러나 당신은 명시 적으로이 테이블을 마이그레이션에 생성해야합니다.

참조 설명서 here

+0

나를 위해 최선의 선택은 각각 following_user와 following_users에 대한 모델과 테이블 이름을 변경하는 것입니다. –

+0

당신이 할 일은': join_table' 옵션을 추가하는 것뿐입니다. 종래의 명명법을 사용하지 않을 경우,이 옵션을 사용하여 조인 테이블 이름을 지정할 수 있습니다. –

+0

어떤 모델을 선택해야합니까? 해야 할 것 : join_table => 'followings'? 왜냐하면 나는 그것을 User와 Following 모델 모두에서 시도했기 때문에 '자체적으로 결합'하려고하기 때문에 다음과 같은 것을 던졌다. 유일하지 않은 테이블/별칭 : 'followings': SELECT'followings'. * FROM'followings' INNER JOIN 'followings' on'followings'.id ='followings'.following_id WHERE ('followings'.follower_id = 1) –

1

또한 새로운 구문 has_many :through를 사용하여이 작업을 수행 할 수 있습니다

class User < ActiveRecord::Base 
    has_many :user_followings 
    has_many :followings, :through => :user_followings 
end 

class UserFollowing < ActiveRecord::Base 
    belongs_to :users 
    belongs_to :followings 
end 

class Following < ActiveRecord::Base 
end 

이 조인 테이블 열 user_idfollowing_id:user_followings라고 요구한다.

HABTM은 여전히 ​​잘 작동하지만 유용 할 수있는 조인 모델에 대한 메서드를 정의 할 수 있으므로 HABTM보다 일반적으로 더 좋습니다.

+0

다음의 정보는 어떤 모델을 가질 것인가? –

+0

다음 모델을 사용할 필요가 없다면 연관을 정의 할 필요가 없습니다. 즉, 다음 사용자를 알고 싶다면 'has_many : user_followings' 및'has_many : users, : through => '를 정의 할 수 있습니다. : user_followings'. 나는 당신이 올린 해결책이 비슷한 것을한다고 생각한다. – zetetic

관련 문제