[Ruby on Rails 5] form_with でシンプルなサーチフォームを作成する
RailsCasts の Simple Search Form を復習。
 form_with で書き換えます。
 
 [markdown]
 ## 復習
テキストフィールドに検索ワードを入力するシンプルなフォーム。
> * [#37 Simple Search Form – RailsCasts](http://railscasts.com/episodes/37-simple-search-form)
 > * [#37 Simple Search Form – RailsCasts / comment](http://railscasts.com/episodes/37-simple-search-form?view=comments#comment_155647)
### View
`/items?utf8=✓&search=foo` とするためには `method: :get` や `name: nil` がポイントです。
 以下で付与されている `class` は Bootstrap のものです。
“`ruby:app/views/items/index.html.haml
 = form_tag items_path, method: :get do
 .form-group
 = label_tag :search
 = text_field_tag :search, ”, class: ‘form-control’
 .form-group
 = label_tag :price
 = number_field_tag :min_price, ”, class: ‘form-control’, placeholder: ‘min. price’
 = number_field_tag :max_price, ”, class: ‘form-control’, placeholder: ‘max. price’
 = submit_tag ‘Search’, class: ‘btn btn-primary’, name: nil
 “`
### Controller
コントローラでは、`models/item` の `#search` クラスメソッドを呼ぶだけにします。
 ページネーションがあれば `.page(params[:page])` を追加します。
“`ruby:app/controllers/items_controller.rb
 class ItemsController < ApplicationController
 before_action :set_item, only: [:show, :edit, :update, :destroy]
 def index
 @items = Item.search(params).page(params[:page])
 end
```  ### Model  プレースホルダ `name LIKE ?` を利用して `where` で絞り込みます。
いくつか検索条件も追加します。  ```ruby:app/models/item.rb
class Item < ApplicationRecord
 def self.search(params)
 results = all.order(created_at: :desc)
 results = results.where('name LIKE ?', "%#{params[:search]}%") if params[:search].present?
 results = results.where('price >= ?’, params[:min_price]) if params[:min_price].present?
 results = results.where(‘price <= ?', params[:max_price]) if params[:max_price].present?
 results
 end
```  ## form_with  Rails v5.1 で `form_with` が導入されました。  > * [[Rails 5.1] ‘form_with’ APIドキュメント完全翻訳](https://techracho.bpsinc.jp/hachi8833/2017_05_01/39502)
書き直してみます。
> * [form_with search field in Rails 5.1 – Stack Overflow](https://stackoverflow.com/questions/43013354/form-with-search-field-in-rails-5-1)
 > * [Rails 5.1’s form_with vs. form_tag vs. form_for – Patrik on Rails](https://m.patrikonrails.com/rails-5-1s-form-with-vs-old-form-helpers-3a5f72a8c78a)
“`ruby:app/views/items/index.html.haml
 = form_with url: items_path, method: :get, local: true do |f|
 .form-group
 = f.label :search
 = f.text_field :search, class: ‘form-control’
 .form-group
 = f.label :price
 = f.number_field :min_price, class: ‘form-control’, placeholder: ‘min. price’
 = f.number_field :max_price, class: ‘form-control’, placeholder: ‘max. price’
 = f.submit ‘Search’, class: ‘btn btn-primary’, name: nil
 “`
## 補遺
> * [#111 Advanced Search Form (revised) – RailsCasts](http://railscasts.com/episodes/111-advanced-search-form-revised)
 > * [Rails 5.1とBootstrapで作るシンプルな検索機能のテンプレ | 酒と涙とRubyとRailsと](http://morizyun.github.io/blog/search-form-rails-bootstrap/)
 [/markdown]
