假设我在用户和消息之间有一个has_many关系。
我想设置一个范围,以便能够根据他们发布的最后消息中的内容来过滤用户。所以只搜索每个用户的最后一条消息。
下面我在所有消息中得到了结果......
class Contact < ActiveRecord::Base
has_many :messages
scope :filter_by_last_messages, lambda { |value|
joins(:messages).where("messages.content = ?", value)
}
end
答案 0 :(得分:1)
无法在一个范围内一次性完成此操作,但您可以这样做:
scope :last_message, joins(:messages)
.select("contacts.*, messages.content")
.order("messages.created_at")
在您的控制器中:
if @contact.last_message.content == value
do_something
end
所以有一点可以作为范围。
答案 1 :(得分: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)
}