Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

searching records between start date and end dates for ransack

Hi i am using ransack + kalendae_assets gem for searching records in between start date and end date for this i am using ransack PREDICATES by referring https://github.com/ernie/ransack/blob/master/lib/ransack/constants.rb

here is my code

<%= search_form_for @search, url: guest_search_rooms_path, html: {:method =>:post} do |f| %>
  <%= f.label :start_date_eq , "Start Date"%>   
  <%= f.text_field :start_date_eq, class: 'release_date' %>     

  <%=f.label :end_date_eq, "End Date" %>   
  <%= f.text_field :end_date_lteq, class: 'release_date' %>     
  <%= f.submit "search" %>
<% end %>

rooms.controller

def guest_search 

  @search = Room.search(params[:q])
  @roome = @search.result(:distinct => true)
  @room= @roome.where("status IS ?", true).order("room_type_id desc")

  #@room = @search.result(:distinct => true)
 end 

but when i enters start and end date it not searches how can i do this

like image 406
r15 Avatar asked Apr 09 '13 06:04

r15


2 Answers

With https://github.com/dangrossman/bootstrap-daterangepicker you can do date range search with:

= search_form_for q, url: orders_path, builder: SimpleForm::FormBuilder do |f|
  = f.input :daterange , input_html: {value: "#{q.date_gteq.to_s} - #{q.date_lteq.to_s}"}
  = f.input :date_gteq, as: :hidden
  = f.input :date_lteq, as: :hidden

:coffee
  $ ->
    $('#q_daterange').daterangepicker
      format: "YYYY-MM-DD"
      startDate: $('#q_date_gteq').val()
      endDate: $('#q_date_lteq').val()
      ranges:
        'This Week': [moment().startOf('week'), moment().endOf('week')],
        'Next Week': [moment().add('week', 1).startOf('week'), moment().add('week', 1).endOf('week')]
    , (start, end, label) ->
      $('#q_date_gteq').val start.format("YYYY-MM-DD")
      $('#q_date_lteq').val end.format("YYYY-MM-DD")
    .on 'apply.daterangepicker', -> $('#order_search').submit()
like image 197
tomaszbak Avatar answered Sep 19 '22 15:09

tomaszbak


You could make a custom predicate.

In my view I have a ransack search field like

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

That will send a date to the controller like

'2015-10-01 to 2015-10-31'

then in my down and dirty ransack.rb initializer I have;

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
like image 34
Justin Hamilton Avatar answered Sep 19 '22 15:09

Justin Hamilton