Как мне сделать этот запрос с помощью мета-места и объединений? - PullRequest
0 голосов
/ 07 июля 2011

У меня есть User.rb:

has_many :sent_messages, :class_name => "Message", :foreign_key => "sent_messageable_id"

Каждый Message.rb имеет account_id и метод: givereceive:

belongs_to :account

Я хочу создать метод для учетной записи.модель rb, чтобы я мог показать всем пользователям (в единственном экземпляре), которые отправили сообщение, где account_id совпадает с учетной записью и: givereceive = "Give"

Я попытался сделать следующее:

 User.joins(:sent_messages).where(
     {:sent_messages => [:account_id => self.account_id, 
                         :givereceive => "Give"]})

Но я получаю сообщение об ошибке, которое не связано с сообщениями.

Кроме того, это не удалит дублирующиеся экземпляры (например, один и тот же пользователь создал несколько сообщений с одной и той же учетной записью).

Я тестирую его в консолии иметь драгоценный камень metawhere.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 14 июля 2011

Добавьте эти ассоциации к вашим моделям:

class Message < ActiveRecord::Base
  belongs_to :account
  belongs_to :user, :foreign_key => "sent_messageable_id"
end

class Account < ActiveRecord::Base
  has_many :give_messages, :class_name => "Message", :conditions => {:givereceive => "Give"}
  has_many :users, :through => :give_messages
end

Теперь, чтобы получить пользователей, которых вы ищете, просто позвоните @account.users.

0 голосов
/ 07 июля 2011

Попробуйте изменить joins(:messages) на joins(:sent_messages)

 User.joins(:sent_messages).where(
     {:sent_messages => [:account_id => self.account_id, 
                         :givereceive => "Give"]})
...