Как мне сделать этот запрос с помощью мета-места и объединений?
У меня есть 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
,