2014-02-19 32 views
1

我有一個小問題。合併兩個有效的記錄結果

基本上,我期待從表格中獲得項目列表,我有一個按日期排序的模型,但在最後一小時(DateTime.now-30.minutes..DateTime.now+30.minutes)中的日期項目應顯示在結果的頂部。

我需要能夠使用where和其他活動記錄方法的結果,所以+是不可能的。

目前,我得到兩個結果:1與所有的記錄和1的記錄在時間範圍內,然後使用merge但是,然後抹掉第一陣列。

我該怎麼做?

+1

你能舉個例子嗎? – shiva

+0

你可以給你自己的代碼和你想要的輸出嗎? – Emu

回答

0

嘗試類似如下:

ORDER BY 
CASE created_at 
WHEN > 1.hour.ago THEN 1 
ELSE 2, created_at 

在ActiveRecord的範圍的情況下,將以下內容:

order("CASE WHEN created_at>'#{1.hour.ago.to_date}' THEN 1 ELSE 2 END, created_at") 

所以,你可以用它代替兩個一個查詢。你不需要合併。

我可以給你更詳細的例子,如果你表現出你的模型

1

你在找這個?

@latest = Model1.where... 
@all = Model1.all 

@merged = @latest | @all 
0

Model.order("date_column DESC")怎麼樣?

有幾種實現方法。通常你定義一個簡單的scope,併爲更復雜的查詢定義一個finder-method。

0

在SQL中,您可以使用UNION合併兩個查詢。 Rails不支持開箱即用的UNION,但this gist中的代碼應該有效。我試過這一次,它的工作,但不知道它是否適合您的需求。