named_scope объединяет проблемы псевдонимов - PullRequest
2 голосов
/ 25 августа 2011

У меня есть named_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}%"])

Я запустил вышеупомянутую строку и получил ошибку псевдонима

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

Есть ли способ обойти это ..

1 Ответ

2 голосов
/ 19 ноября 2011

где-то у вас есть has_many что-то: through =>: 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 и участникам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...