利用例
idか名前に「3」を含む利用者を検索したい場合
実現方法
ransackを利用した場合を記述します
Gemfile
gem 'ransack'
app/views/users/index.html.erb
<%= search_form_for @q, url: users_path do |f| %>
<%= f.text_field :search_word %>
<%= f.submit 'Search' %>
<% end %>
app/controllers/users_controller.rb
def index
params[:search_word]
@q = User.ransack({ id_or_name_cont: params[:search_word] })
@users = @q.result(distinct: true)
end
app/models/user.rb
private
ransacker :id do
Arel::Nodes::SqlLiteral.new("CONVERT(#{table_name}.id, CHAR(8))")
end
注意点
ransackerはmodelに記述します。
このようransackerを記述することで、文字列に変換されたidが検索に使われます。
以上です。
誰かのお役に立てれば幸いです。
間違いなどがありましたら指摘していただけると嬉しいです。
参考
https://github.com/activerecord-hackery/ransack/issues/85
https://github.com/activerecord-hackery/ransack