2012-04-14 4 views
2

기본적으로 ROR 가이드 http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association을 따라 아래에 표시된 관계 모델을 작성합니다.그룹 관계를 통해 사용자에게 속한 문서 모델의 모든 인스턴스 나열

through 연결 때문에 @ user.trips는 사용자가 만든 여행과 사용자에게 속한 여행을 모두 제공한다고 생각했습니다. 그러나 콘솔에서 @user.trips.count을 실행하면 결과는 사용자가 생성 한 트립의 수만입니다. '그룹'연결을 통해 사용자에게 속한 여행은 계산되지 않았습니다.

질문 : 사용자가 만든 여행과 사용자가 속한 여행을 모두 '그룹'을 통해 표시하려면 어떻게해야합니까?

사용자/show.html.erb

<% unless @user.all_trips.empty? %> 
    <% @user.all_trips.each do |trip| %> 
    <!-- Content --> 
    <% end %> 
<% end %> 

user.rb

class User < ActiveRecord::Base 
    has_many :group_trips, :through => :groups, 
         :source => :trip 
    has_many :trips, :dependent => :destroy 
    has_many :groups 

    def all_trips 
    self.trips | self.group_trips 
    end 


end 

trip.rb

class Trip < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :traveldeal 
    has_many :groups 

    has_many :users, :through => :groups 
end 

group.rb

class Group < ActiveRecord::Base 
    belongs_to :trip 
    belongs_to :user 
end 

감사!

편집 : TSherif의 부분 해결 코드가 수정되었습니다. 편집 2 : all_trips 메소드가 수정되었습니다. 이 시점에서 모든 것이 나를 위해 작동하는 것처럼 보입니다.

+0

, 나는 그것이 아마 주위를 변경하지 않는 더 좋은 생각 인 것 같아요 귀하의 질문에 너무 많은 코드. 자, 당신이 가진 것과 똑같은 문제가 있다면, 그들은 말할 수 없을 것입니다. – tsherif

+0

다음 번에이를 염두에 두십시오. 나는 사람들이 일하는 해결책을 보았다면 그것이 도움이 될 것이라고 생각했다. – Huy

답변

2

오! 나는 당신이하려는 것을 얻고 그것이 왜 문제가되는지 생각합니다. 나는 왜 has_many :trips번이으로 두 번 불려지는지 궁금 해서요. 하지만 내가 이해하는 바에는 두 개의 서로 다른 User - Trip 개의 관계가 있습니다. 이 두 사람은 같은 이름을 가질 수 없습니다. 그렇지 않으면 다른 사람을 숨길 것입니다.

class User < ActiveRecord::Base 
    has_many :group_trips, :through => :groups, 
         :class_name => "Trip" 
    has_many :trips, :dependent => :destroy 
    has_many :groups 

    def all_trips 
    Trip.joins(:groups).where({:user_id => self.id} | {:groups => {:user_id => self.id}}) 
    end 
end 

을 아니면 레일의 이전 버전을 사용하는 경우 그없는 MetaWhere : 이런 식으로 뭔가를 시도 BTW

def all_trips 
    Trip.joins(:groups).where("(trips.user_id = ?) OR (groups.user_id = ?)", self.id, self.id) 
end 
+0

Rails 3 조인 메소드가 연관성을 가질 수 있는지 확신하지 못했습니다. 또한 식을 where 메서드에 전달하는 것처럼 보입니다. 이 방법에 대한 자세한 정보는 어디에서 읽을 수 있습니까? api.rubyonrails.org 및 apidoc.com 문서를 Where 방법으로 : 곳 (의 opts, * 나머지) 그래서 내가 가지고있는 유일한 문서는 레일 2.3 찾기 방법에서입니다. –

+1

'where' 절의 표현식은'MetaWhere' 구문을 사용합니다. 여기에 대한 정보를 얻을 수 있습니다 : http://erniemiller.org/projects/metawhere/ – tsherif

+0

감사합니다. 나는 아주 고맙다. 그래도 Rails 문서는 이와 같은 것들을 찾아 다니는 대신 모든 것을 찾을 수있는 더 좋은 곳이 될 것입니다. :) –

관련 문제