1

消息可以有多個註釋:Rails:如何對消息進行評論?

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

我怎麼能編寫一個命名範圍,該範圍返回在給定時間範圍內創建的具有發佈(郵件本身或其評論之一)的郵件,按照最新發布的創建時間排序(最新的發佈時間)?

實施例:

如果存在下面的消息:

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

這是從我的頭頂,但我認爲你可以這樣做:

Message.joins(:comments).where(["comments.start_time > ? AND comments.end_time < ?", start_time, end_time]); 
+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