0

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"]})

しかし、メッセージとの関連付けがないというエラーが表示されます。

また、これによって重複するインスタンスが削除されることはありません (たとえば、同じユーザーが同じアカウントで複数のメッセージを作成した場合)。

私はコンソールでそれをテストしていて、metawheregemを持っています。

ありがとう。

4

2 に答える 2

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 に答える
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 に答える