消息可以有多个注释:
class Message < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :message
end
以下命名范围返回在给定时间范围内创建的消息,按创建时间排序(最新的第一个):
scope :created_between,
lambda { |rng| where("created_at" => (rng[:start_time]..rng[:end_time])).
order("created_at DESC") }
如何编写一个命名范围,该范围返回在给定时间范围内创建的具有post(消息本身或其中一条注释)的消息,按最新帖子的创建时间(最新的第一个)排序? / p>
示例:
如果存在以下消息:
Message 1 April, 2010
Comment 1 May, 2011
Comment 2 July 2011
Message 2 January 2011
Comment 1 August 2011
Comment 2 March 2011
Comment 3 February 2011
Message 3 March 2009
Comment 1 January 2010
Message 4 June 2011
然后
scope :has_post_between({:start_time => <February 2010>,
:end_time => <August 2011>}), ...
应该返回:
Message 2
Message 1
Message 4
Message 3
未包含在内,因为其帖子是在2010年2月之前创建的。
Message 2
是第一个,因为它有最新的帖子(2011年8月)。
答案 0 :(得分:1)
class Message < ActiveRecord::Base
has_many :comments
scope :updated_between, lambda { |rng|
joins(:comments).
where(:created_at => rng, :comments => { :created_at => rng }).
order("comments.created_at DESC, messages.created_at DESC")
}
end
答案 1 :(得分:0)
这是我的头脑,但我认为你可以做到:
Message.joins(:comments).where(["comments.start_time > ? AND comments.end_time < ?", start_time, end_time]);