2011-08-25 76 views
2

我有一個名爲_scope它進行連接。我已經包含下面named_scope加入別名問題

named_scope :has_more_than_one,{ 
      :select  => "sessions.*", 
      :joins  => :attenders, 
      :conditions => {:attenders => {:attending => true}}, 
      :group  => "sessions.id", 
      :having  => "count(sessions.id) > 1" 


Meeting.has_more_than_one.all(:group => "sessions.id", 
    :include => [:attenders => [ :issues ]], 
    :conditions => ["sessions.id in (select attenders.session_id from attenders where person_id in (select persons.id from persons where first_name like (?) or last_name like (?) or first_name like (?) or last_name like (?)))", 
     "#{attendee_first_name}%","#{attendee_last_name}%","#{attendee_last_name}%","#{attendee_first_name}%"]) 

我跑上面的一致named_scope方法,得到了一個混疊誤差

ActiveRecord::StatementInvalid: Mysql::Error: Not unique table/alias: 'member_meetings' 

有什麼辦法來解決這個問題..

回答

2

某處你有一個的has_many東西:通過=>:member_meetings,你不顯示在這裏。 我想那是一些參加者。

無論如何,您正在加入作用域的連接,然後再次加入:include選項,因此需要兩次相同的表。

如果這是正確的,你應該這樣定義

named_scope :has_more_than_one,{ 
     :select  => "sessions.*", 
     :joins  => <specify the join with the condition here aliasing the tables>, 
     # this line would go away :conditions => {:attenders => {:attending => true}}, 
     :group  => "sessions.id", 
     :having  => "count(sessions.id) > 1" 

這聯接查詢可能是這樣的

:joins => "inner join member_meetings mm ON mm.meeting_id = meetings.id 
      inner join attendees at ON mm.attendee_id = at.id AND 
      at.attending is true" 

注意,我既別名member_meetings &與會者範圍。