ページの読み込み時にすべてのアイテムを表示しようとしていて、アイテムの日付範囲のみを表示するように日付が選択されています(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">
'Request.where(:日付=> date_from..date_to)が' - 引用符を取り除きます。 – max