簡體   English   中英

使ActiveAdmin使用包含日期過濾器?

[英]Make ActiveAdmin use inclusive date filter?

通常在選擇日期范圍時,您希望日期包含在內。 即“11/07/2011” - “11/09/2011”您希望它能夠從11月7日,8日和9日返回結果。 ActiveAdmin過濾器現在的工作方式看起來就像日期范圍只返回第8個結果,這是違反直覺的。

為了將此行為更改為預期,我需要修改什么?

雖然雷爾斯的主要想法是正確的,但解決方案太過於苛刻。 你不應該修補客戶端。 我們所要做的就是使用before_filter為datetime列的*_lte輸入添加時間擴展。 我們可以很容易地實現對ActiveAdmin::ResourceDSLfilter方法的ActiveAdmin::ResourceDSL

以下是解決此問題的通用解決方案: https//gist.github.com/4015836

AA中的代碼使用gte和lte,因此它試圖包容。 我發現問題是使用日期時間而不是日期。 問題是代碼只指定了日期部分,當擴展到日期時間時,會在午夜(00:00:00.000000)生成相同的日期。 對於gte(無害的)和lte(它是致命的)部分都會發生這種情況。 比較lte的部分需要與23:59:59.999999的時間部分進行比較。

所以,這就是我所做的,似乎有效。

使用以下內容在相對路徑'app / assets / javascript / make_datetime_lte_work.js.coffee'創建coffeescript文件:

    $(document).ready ->
      $('input.datepickerlte').datepicker 'option', {dateFormat: 'yy-mm-dd     23:59:59.99999'}

接下來,我們將修補日期范圍過濾器代碼。 將以下內容放入相對路徑'config / initializers / make_datetime_lte_work.rb'的ruby文件中:

module ActiveAdmin
  module Inputs
    class FilterDateRangeInput

      def to_html
        input_wrapping do
          [ label_html,
            builder.text_field(gt_input_name, input_html_options(gt_input_name)),
            template.content_tag(:span, "-", :class => "seperator"),
            builder.text_field(lt_input_name, input_html_options(lt_input_name, ' datepickerlte')),
          ].join("\n").html_safe
        end
      end

      def input_html_options(input_name = gt_input_name, extra_class = '')
        current_value = @object.send(input_name)
        { :size => 12,
          :class => "datepicker" + extra_class,
          :max => 10,
          :value => current_value.respond_to?(:strftime) ? current_value.strftime("%Y-%m-%d") : "" }
      end
    end
  end
end

現在,請確保編輯您的app / assets / javascript / active_admin.js以通過在評論中添加對其的引用來引用您的新javascript文件。 這是我的樣子:

//= require active_admin/base
//= require make_datetime_lte_work

重新啟動rails應用程序,以便調用初始化程序。

現在,過濾器中日期范圍的結尾部分將附加到日期的23:59:59.999999,其中將包括(幾乎)整天。

希望有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM