2017-08-13 6 views
1

ページの読み込み時にすべてのアイテムを表示しようとしていて、アイテムの日付範囲のみを表示するように日付が選択されています(materializecss datepickerを使用)。 @all_requests = Request.allを行うだけですべてのアイテムを表示するのは簡単ですが、form_forやform_tagなどのさまざまなメソッドを試してみました。現在、デフォルトの日付のため、今日のアイテムのみを表示しています。私はそれがnilエラーを与えるデフォルトを削除した場合、日付が選択されていないので、今日、しかし、私は...レールでmaterializecssを使用して日付でフィルタリングする

Index.html.erb

<%= form_tag requests_path, method: :get do %> 
    <%= text_field_tag 'search[date_from]', @search.date_from, placeholder: 'From date', class: 'datepicker' %> 
    <%= text_field_tag 'search[date_to]', @search.date_to, placeholder: 'To date', class: 'datepicker' %> 
    <%= submit_tag 'Search', class: 'btn waves-effect waves-light formbttn' %> 
    <% end %> 

    <div class="row"> 
    <% @all_requests.each do |request| %> 
    ... 

Request.search.rb

を考えます
class RequestSearch 
    attr_reader :date_from, :date_to 

    def initialize(params) 
    params ||= {} 
    date_from = parsed_date(params[:date_from], Date.today.to_s) 
    date_to = parsed_date(params[:date_to], Date.today.to_s) 
    end 

    def scope 
    Request.where(:date => 'date_from'..'date_to') 
    end 

    def parsed_date(date_string, default) 
    Date.parse(date_string) 
    rescue ArgumentError, TypeError 
    default 
    end 
end 

Requests_controller.rb

def index 
    # if params[:search] == nil 
    # @all_requests = Request.all 
    # else 
     @search = RequestSearch.new(params[:search]) 
     @all_requests = @search.scope 
    end 

Materializecss DOM

<input type="text" name="" id="search_date_from" value="2017-08-13" 
placeholder="From date" class="datepicker picker__input" readonly="" 
tabindex="-1" aria-haspopup="true" aria-expanded="false" 
aria-readonly="false" aria-owns="search_date_from_root"> 
+0

'Request.where(:日付=> date_from..date_to)が' - 引用符を取り除きます。 – max

答えて

0
class RequestSearch 
    attr_reader :date_from, :date_to 

    # use keyword args instead 
    def initialize(date_from: nil, date_to: nil, **kwargs) 
    # You need to use `@` to set instance vars 
    @date_from = parsed_date(date_from) 
    @date_to = parsed_date(date_to) 
    end 

    def scope 
    Request.where(date: date_from..date_to) 
    end 

    # reduce the arity by setting the default in the method 
    # definition 
    def parsed_date(date_string, default = Date.today.to_s) 
    Date.parse(date_string) 
    rescue ArgumentError, TypeError 
    default 
    end 
end 
+0

引数の数が間違っています(与えられた1、期待される0) def initialize(date_from:nil、** kwargs) 私は完全なparams [:search]コントローラーで? – Evenstar

関連する問題