我正在創建一個過濾部分視圖,其中用戶可以使用日曆選擇from
-date和to
-date。這些日期在模型範圍內用於在數據庫查詢中執行SQL Where
子句。如果用戶未選擇其中一個日期,則應分配默認值:from
的最小可用日期和to
的最大可用日期。最小和最大可能日期
unless params[:from].blank? and params[:to].blank?
from = begin Date.parse(params[:from]) rescue ??? end
to = begin Date.parse(params[:to]) rescue ??? end
@model_instances = @model_instances.start_end from, to
end
(...)
scope :start_end, -> (start_date, end_date) { where('(:start_date <= "from" AND "from" <= :end_date) OR' +
'(:start_date <= "to" AND "to" <= :end_date) OR' +
'("from" <= :start_date AND :end_date <= "to")',
{start_date: start_date, end_date: end_date}) }
的from
和to
模型日期屬性也是相關表的數據庫字段。
在Rails,Date
類有一個家庭的方法beginning_of
(日,周,月等),但目前還沒有方法,beginning_of_time
,end_of_time
,Date.min
,Date.max
。
是否有任何方法來獲取最小和最大日期?
日期範圍,你可以直接跳過這個過程中,如果沒有'PARAMS [:從]'或'PARAMS [:至] '給出,所以任何日期都會匹配查詢 – MrYoshiji
@MrYoshiji我添加了模型範圍代碼。我需要我的SQL查詢工作,即使只有一個日期是由用戶選擇。 – sgnsajgon
如果只提供兩個日期中的一個,並且如果提供了兩個'start_end'作用域,則可以將'start_end'作用域分割爲兩個不同的作用域'start_before'和'end_before'。我認爲這是最好的方法,因爲在這種情況下,你不會「猜測最終用戶未提供的日期」 – MrYoshiji