如何使用metawhere和join进行此查询?

时间:2011-07-07 17:14:16

标签: ruby-on-rails join meta-where

我有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 gem。

感谢。

2 个答案:

答案 0 :(得分:0)

尝试将joins(:messages)更改为joins(:sent_messages)

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

答案 1 :(得分:0)

将这些关联添加到模型中:

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