0

我有用户.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。

谢谢。

4

2 回答 2

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.

于 2011-07-14T15:44:07.063 回答
0

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

 User.joins(:sent_messages).where(
     {:sent_messages => [:account_id => self.account_id, 
                         :givereceive => "Give"]})
于 2011-07-07T17:33:19.477 回答