###コード
ruby
1#/app/models/base.rb 2class Search::Base 3 include ActiveModel::Model 4 include ActiveModel::Validations::Callbacks 5 6 def contains(arel_attribute, value) 7 arel_attribute.matches("%#{escape_like(value)}%") 8 end 9 10 def escape_like(string) 11 string.gsub(/[\\%_]/) { |m| "\\#{m}" } 12 end 13 14 def value_to_boolean(value) 15 ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value) 16 end 17end
ruby
1#/app/models/coordinator.rb 2class Search::Coordinator < Search::Base 3 ATTRIBUTES = %i( 4 id 5 name 6 name2 7 ) 8 attr_accessor(*ATTRIBUTES) 9 10 def matches 11 t = ::Product.arel_table 12 results = ::Product.all 13 results = results.where(contains(t[:code], code)) if code.present? 14 results = results.where(contains(t[:name], name)) if name.present? 15 results = results.where(contains(t[:name_kana], name_kana)) if name_kana.present? 16 results = results.where(t[:price].gteq(price_from)) if price_from.present? 17 results = results.where(t[:price].lteq(price_to)) if price_to.present? 18 if purchase_cost_from.present? 19 results = results.where(t[:purchase_cost].gteq(purchase_cost_from)) 20 end 21 if purchase_cost_to.present? 22 results = results.where(t[:purchase_cost].lteq(purchase_cost_to)) 23 end 24 results = results.where(availability: true) if value_to_boolean(availability) 25 results 26 end 27end
ruby
1#/app/controllers/coordinators_controller.rb 2def index 3 @coordinators = Coordinator.all 4 @search = Search::Coordinator.new 5 end 6 7 def search 8 @search = Search::Coordinator.new(search_params) 9 @search = @search 10 .matches 11 .order(availability: :desc, code: :asc) 12 .decorate 13 end 14 15 private 16 def search_params 17 params.require(:search_coordinator).permit(Search::Coordinator::ATTRIBUTES) 18 end
ruby
1<!--index.html.erb--> 2<%= form_for(@search, url: search_coordinators_path, html: { method: :get, class: 'form-horizontal', role: 'form' }) do |f| %> 3 <%= f.text_field :code, class: 'form-control' %> 4 <%= f.text_field :name, class: 'form-control' %> 5<% end %>
###参考にしたサイト
http://rails.densan-labs.net/form/search_form.html
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/09 05:08
2017/05/09 05:26 編集
2017/05/09 05:38
2017/05/09 06:32 編集