2014-12-24 59 views
1

我想搜索created_at Date.today.beginning_of_day..Date.today.end_of_dayRails的洗劫

之間

Order.search({created_at_between: Date.today.beginning_of_day..Date.today.end_of_day }).result 

,但不是工作

如何使搜索日期之間created_at之間用呢?

回答

1

配置/初始化/ ransack.rb

Ransack.configure do |config| 
    config.add_predicate 'between', 
    arel_predicate: 'between', 
    formatter: proc { |v| 
     parts = v.split(',') 
     OpenStruct.new(begin: parts[0], end: parts[1]) 
    }, 
    validator: proc { |v| v.present? }, 
    type: :string 
end 

然後created_at_between '2014-01-01,2014-01-02'作品!

0

這裏是解決方案,

params[:q] = {:created_at_gt => Date.current.beginning_of_day, :created_at_lt => Date.current.end_of_day} 

Order.search(params[:q]).result 
+0

謝謝!這很有用。 –

0

我同意Frank所接受的答案,但我使用的arel版本沒有定義'between'。因此,如果您使用的是舊版本,請參閱下面的快速和骯髒的解決方案。

在我看來,我有一個像

= f.text_field :request_date_between, class: 'daterange' 

一個洗劫搜索字段將日期發送到控制器像

「2015年10月1日至2015年10月31日」

然後我下來,髒ransack.rb初始化我有;

Ransack.configure do |config| 
    config.add_predicate 'between', 
         arel_predicate: 'between', 
         formatter: proc { |v| v.split(' to ') }, 
         type: :string 
end 

module Arel 
    module Predications 
    def between other 
     gteq(other[0]).and(lt(other[1])) 
    end 
    end 
end