&tag(Ransack);
gem "ransack"
def index @search = Item.ransack(params[:q]) @items = @search.result end
※searchじゃなくてransackメソッドのほうが推奨になったらしい(公式サイト)
<%= search_form_for @search do |f| %>
<%= f.text_field :title_cont %>
<%= f.submit '検索' %>
<% end %>
<% @items.each do |item| %>
(省略)
<% end %>
ernie/ransack_demoと、それを解説した#370 Ransack - RailsCastsが参考になる。
git clone https://github.com/ernie/ransack_demo
bundle install --path vendor/bundle
bundle exec rake db:create:all
bundle exec rake db:migrate
bundle exec rake db:fixtures:load
bundle exec rails s
@search = Post.ransack(params[:q]) @search.sorts = 'name asc' if @search.sorts.empty? #一つの場合 @search.sorts = ['name asc', 'created_at desc'] if @search.sorts.empty? # 複数の場合 @posts = @search.result.paginate(page: params[:page], per_page: 20)
params[:q][:s] = "rating desc"
@search.result.order("rating desc")<%= sort_link(@q, :name, 'Last Name', default_order: :desc) %>
params[:q][:s] = build_sql(params[:sort_order])