2013-11-21 1 views
0

사용자가 임의의 수의 그룹을 만드는 앱을 만들고 있습니다. 그룹이 생성되면 그룹 테이블의 owner_id는 current_user.id의 owner_id로 설정됩니다.user_id 대신 owner_id를 외래 키로 사용하는 방법은 무엇입니까?

특정 사용자가 소유 한 그룹을 표시하는 데 문제가 있습니다. GroupMembers 테이블을 통해 사용자와 그룹간에 다 대다 관계가 있음에 유의하십시오. 모델에 ("소유자")에 단지 마지막 줄을 추가

class Group < ActiveRecord::Base 
    has_many :group_members, :dependent => :destroy 
    has_many :users, :through => :group_members 
    belongs_to :owner, class_name: User, foreign_key: :owner_id 
end 

question을 바탕으로

, 나는 그런처럼 내 group.rb 모델을 수정했습니다. 문제는 내가보기에 사용자에게 속한 그룹을 표시 할 때입니다.

<h3>User</h3> 
<p>User: <%= @user.name %></p> 
<p>Email: <%= @user.email if @user.email %></p> 
<p>Groups: 
    <% @user.groups.each do |group|%> 
    <%= group.name %> 
    <% end %> 
</p> 

표시되는 그룹이 없습니다. 그것은 명시 적으로이 작업을 위해 UsersController 내부에서 그룹 테이블에 조인 할 필요가 보인다? 그러나 나는 확실하지 않다. 나는 토끼의 구멍을 너무 깊게 내려 가지 않으려 고 조언을 듣고 싶다.

UPDATE : 여기

내 사용자 모델 :

class User < ActiveRecord::Base 
has_many :group_members, :dependent => :destroy 
has_many :groups, :through => :group_members 

    rolify 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :invitable, :database_authenticatable, :registerable, :confirmable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

답변

4

당신은, 당신은 Grouphas_one :user 협회의 독립적 인 User 모델에 :groups 연관을 사용하고 @user.groups를 가져올 때 모델. 위에서 제공 한 코드는 관련 비트가 아닙니다. 당신은 무엇이 필요하다 :

class User < ActiveRecord::Base 
    has_many :groups, foreign_key: :owner_id 
end 

업데이트 : 이미 has_many :groups 관계를 가지고 있기 때문에, 당신은 다른 사람이 뭔가 이름을해야합니다. 예를 들어,

class User < ActiveRecord::Base 
    has_many :owned_groups, foreign_key: :owner_id, class_name: Group 
end 

은 그럼 당신은 @user.owned_groups 대신 @user.groups 할보기 코드를 업데이트해야합니다, 또는 잘못된 모음을 가져 오는됩니다.

(PS의 Group 모델의 역관계는 belongs_to :owner, class_name: User, foreign_key: :owner_id하지 has_one이어야한다. 차이점은 has_one 관계 외부 기대 반면 다른 모델 belongs_to 모델이 관계를 정의하는 외부 키를 보유 할 것으로 예상된다는 점이다 관련 테이블에있을 키를 누릅니다.)

+0

내 질문이 업데이트되었습니다. 두 번째 "has_many"라인을 추가해야합니까? 사용자 및 그룹과의 다 - 대 - 다 관계가 있습니다 (사용자가 멤버처럼 행동하기 때문입니다). 하지만 사용자들도 소유자처럼 행동하기 때문에 한 그룹에서 여러 그룹으로 한 명씩 추가하고 싶습니다. – Ramy

+0

위의 수정 사항을 참조하십시오. – gregates

+0

굉장합니다. 이 작동합니다. 나는'@ users.groups'을'@ users.owned_groups'로 바꿀 필요가 있습니다. – Ramy

0

당신은 사용자가 사용자에 그룹 대 소유 그룹을 구별합니다

# user.rb 
has_many :owned_groups, foreign_key: 'owner_id', class_name: "Group" 

뭔가를 할 수 있습니다.

관련 문제