Rails 検索機能は自力でも簡単に実装できる
2326 ワード
どうもチャンクノです!
今回は検索機能を実装します。
スクールとかではransackや検索用のコントローラーを用意していたと思いますが、それらの方法でなくとも実装できます。
完成図から見せます。
Class Hoge < ApplicationRecord
include Hoge::Searchable
end
module Hoge::Searchable
extend ActiveSupport::Concern
include do
scope :search_by_foo, lambda { |foo|
return if foo.blank?
where("hoge.foo" => foo)
}
end
end
class TradeSearchForm
include ActiveModel::Model
attr_accessor :foo
def search
Hoge
.search_by_foo(foo)
end
end
class User::TradesController < User::ApplicationController
def index
@hoge_search_form = HogeSearchForm.new(hoge_search_params)
@hoges = @hoge_search_form.search
.order(id: :desc)
.page(params[:page])
.per(4)
end
private
def hoge_search_params
return if params[:hoge_search_form].blank?
params.require(:hoge_search_form).permit(
:hoge
)
end
end
<%= form_with model: @hoge_search_form, url: hoges_path, method: :get, local: true do |f| %>
<%= f.text_field :hoge %>
<% end %>
こんな感じです。
ちなみにTradeSearchFormクラスをなくして
def index
@hoges = Hoge
.search_by_foo(params[:foo])
.order(id: :desc)
.page(params[:page])
.per(4)
end
private
def hoge_search_params
params.require(:hoge).permit(
:foo
)
end
こういう風にもできますが、メソッドが増えるたびコントローラーに記述しなければならなくなるので好ましくはないと思います。
検索用のクラスを用意してそこにまとめた方がいいでしょう。
ActiveModel::ModelやActiveSupport::Concernについては自分も理解しきれていないのですが、こういうやり方もあるということで紹介させていただきました!!
試しに使ってみるといいと思います!
それでは今日はこの辺で!
何か指摘等ありましたら遠慮なくお願いいたします🙇♂️
皆様よきプログラミングライフを🙏
Author And Source
この問題について(Rails 検索機能は自力でも簡単に実装できる), 我々は、より多くの情報をここで見つけました https://qiita.com/kt215prg/items/de1a683b5301d64c7887著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .