Как мне сделать этот запрос с помощью мета-места и объединений?

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

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

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

belongs_to :account

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

Я попробовал следующее:

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

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

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

Я тестирую его в консоли и получаю гем metawhere.

Благодарю.

2 ответа

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

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

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

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,

Другие вопросы по тегам