我有一個小問題。合併兩個有效的記錄結果
基本上,我期待從表格中獲得項目列表,我有一個按日期排序的模型,但在最後一小時(DateTime.now-30.minutes..DateTime.now+30.minutes
)中的日期項目應顯示在結果的頂部。
我需要能夠使用where
和其他活動記錄方法的結果,所以+
是不可能的。
目前,我得到兩個結果:1與所有的記錄和1的記錄在時間範圍內,然後使用merge
但是,然後抹掉第一陣列。
我該怎麼做?
我有一個小問題。合併兩個有效的記錄結果
基本上,我期待從表格中獲得項目列表,我有一個按日期排序的模型,但在最後一小時(DateTime.now-30.minutes..DateTime.now+30.minutes
)中的日期項目應顯示在結果的頂部。
我需要能夠使用where
和其他活動記錄方法的結果,所以+
是不可能的。
目前,我得到兩個結果:1與所有的記錄和1的記錄在時間範圍內,然後使用merge
但是,然後抹掉第一陣列。
我該怎麼做?
嘗試類似如下:
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")
所以,你可以用它代替兩個一個查詢。你不需要合併。
我可以給你更詳細的例子,如果你表現出你的模型
你在找這個?
@latest = Model1.where...
@all = Model1.all
@merged = @latest | @all
Model.order("date_column DESC")
怎麼樣?
有幾種實現方法。通常你定義一個簡單的scope,併爲更復雜的查詢定義一個finder-method。
在SQL中,您可以使用UNION
合併兩個查詢。 Rails不支持開箱即用的UNION,但this gist中的代碼應該有效。我試過這一次,它的工作,但不知道它是否適合您的需求。
你能舉個例子嗎? – shiva
你可以給你自己的代碼和你想要的輸出嗎? – Emu