3

ユーザーとメッセージの間にhas_many関係があるとしましょう。

最後に投稿したメッセージに何かがあるユーザーでユーザーをフィルタリングできるようにスコープを設定したいと思います。したがって、各ユーザーの最後のメッセージの間でのみ検索します。

以下に、すべてのメッセージの結果を示しました...

class Contact < ActiveRecord::Base
    has_many :messages

    scope :filter_by_last_messages, lambda { |value|
        joins(:messages).where("messages.content = ?", value)
    }
end
4

2 に答える 2

1

スコープ内でこれをワンショットで行うことはできませんが、これを行うことはできます。

scope :last_message, joins(:messages)
         .select("contacts.*, messages.content")
         .order("messages.created_at")

コントローラ内:

if @contact.last_message.content == value
  do_something
end

したがって、少しスコープを設定できます。

于 2012-04-17T21:27:47.123 に答える
0

Userクラスで、最後のメッセージとのbelongs_toリレーションを作成することでそれを理解しました。

belongs_to :last_message, :class_name => 'Message'

最後のメッセージをMessageクラスのafter_createに設定しました。次に、私のスコープは次のようになります。

scope :filter_by_last_messages, lambda { |value|
    joins(:last_message).where("content = ?", value)
}
于 2012-04-19T14:57:10.560 に答える