今回のケースでは、複数のテーブルにまたがっているという事なので、
モデル(ActiveRecord)ではなく検索専用のクラスを作るのが良いと考えます。
検索専用のクラスとは、何も継承していない普通のRubyのクラスの事です。
置き場所としては、app/models/でも良いですし、モデル=ActiveRecordを継承したクラスと区別したいのであれば、app/任意のディレクトリ/に配置してもいいと思います。
※Railsではapp/任意のディレクトリ/*.rbを自動的に読み込んで認識してくれます
ここでは、モデルと区別するためにapp/lib/以下に置くものとして考えます。
(app/models/以下に置いても問題ありません)
もう少し具体的な情報がないと良い名前=クラス名が思いつかないのですが、
MultiTableSearchとでもしておきますか。
Railsではクラス名を小文字にして単語の区切りでアンダースコアでつなげるファイル名にしないと認識しないので、この場合ファイル名はmulti_table_search.rbとなります。
配置場所はapp/lib/multi_table_search.rbですね。
ruby
1class MultiTableSearch
2
3 def self.search(keyword:nil)
4 # ここに検索処理を書く
5 end
6
7end
records = MultiTableSearch.search
records = MultiTableSearch.search(keyword: "キーワード")
という感じで使う事を想定してます。
rails consoleで動作を確認しながら想定したものが実装できたらコントローラのアクションで呼び出せば良いと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/05 06:06
2021/05/05 07:50
2021/05/05 13:31