2014-09-24 4 views
0

그래서 has_many 및 has_many : through 연관을 기반으로하는 객체의 모든 인스턴스를 호출하는 방법을 알아 내려고합니다. 나는 사용자, 그룹 및 회원이 있습니다. 멤버 모델은 그룹과 사용자의 페어링입니다. 그룹에는 해당 모델에 user_id도 있습니다.has_many 대 vs has_many를 지정하는 방법

사용자 모델

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :groups 
    has_many :groups, :through => :members 
end 

그룹 모델

class Group < ActiveRecord::Base 
    has_many :users, :through => :members 
    belongs_to :user 
end 

회원 모델

class Member < ActiveRecord::Base 
    belongs_to :groups 
    belongs_to :users 
end 

인덱스보기

<!--these are the groups I own (the group.user_id is my id) NEEDS EDITING--> 
    <% @groups.each do |group| %> 
     <%= link_to group.title, group_path(group) %> 
     <%= truncate group.desc %> 
    <% end %> 

<!--I'm a member of these groups (connected through the member model) NEEDS EDITING'--> 
    <% current_user.groups.order(:created_at).each do |group| %> 
     <%= link_to group.title, group_path(group) %> 
     <%= truncate group.desc %> 
    <% end %> 
: 코드를 참조 후, 그래서 이것은 더 이해가됩니다

인덱스보기에서 여러 유형의 연결 사용자 및 그룹을 호출하는 방법을 알아 내려고하고 있습니다.

관리자로 나열된 모든 그룹의 목록을 얻고 싶습니다. (그룹. 사용자 _id) 그런 다음 구성원 인 모든 그룹의 개별 목록을 얻고 싶습니다. (구성원 모델을 통해).

내가 find 또는 where 호출로 쿼리 할 수 ​​있음을 알고 있습니다. 그러나, 나는 current_user.groups 또는 무엇인가와 같은 간단한 방법이 있기를 바랬다. 어쨌든 감사합니다!

답변

1

1 : N 관계를 다른 이름으로 그룹화하는 것이 좋습니다. 그래서 당신은 그래서 인덱스보기 같은 것을 보일 것

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_many :owned_groups, class_name: 'Group' 
    has_many :groups, :through => :members 
end 

같은 것을 끝낼 것 :

<% current_user.owned_groups.each do |group| %> 
    <%= link_to group.title, group_path(group) %> 
    <%= truncate group.desc %> 
<% end %> 


<% current_user.groups.order(:created_at).each do |group| %> 
    <%= link_to group.title, group_path(group) %> 
    <%= truncate group.desc %> 
<% end %> 
+0

확인을, 나는 이해 생각하지만 난 하나에 의해 혼란 스러워요 : N. 그게 정확히 무슨 뜻 이죠? 또한 owned_groups는 별도의 모델입니까? 또는 "class_name : 'Group'"소유 그룹을 그룹 모델로 다시 라우트합니까? 나는 그걸 본 적이 없네 . –

+0

괜찮아.이 변화를 구현했는데 이상한 오류가 나왔어. "사용자를 모델로 한 회원을 찾지 못했지만"아직 내 사용자 모델에 "has_many : groups, : through => : members "또한이 오류는"current_user.groups.order .... "행을 강조 표시합니다. –

+0

미안, 1 : NI는 사용자와 자신이 소유 한 그룹 간의"일대 다 "관계를 의미합니다. N : N 관계는 구성원 테이블을 통해 사용자와 그룹 사이에 있습니다. – GSP