これがばかげているように思われる場合は申し訳ありませんが(最近はあまり眠っていません)、コントローラーごとに同じコードを記述せずに、コントローラー(およびメソッド)の機能をコントローラー間で共有する最良の方法を見つけようとしています。
と呼ばれる同じメソッドを持つさまざまなコントローラーがあるとしましょうsearch
。このメソッド内には、次のような異なるコントローラーの同じ用語の状況があります。
case term
when "beginning_parens"
@books = Book.where("title REGEXP ? AND localeLanguage LIKE ?", '^\\([0-9]*\\)', params[:language]).not_locked.reorder(order).paginate(:page => params[:page])
when 'search_all_caps'
@books = Book.detect_uppercase.not_locked.reorder(order).where("localeLanguage LIKE ?", params[:language]).paginate(:page => params[:page])
今は、コントローラーごとにすべてを記述する必要はありません。params[:language]
また、各ケースに、 などを渡す必要はありませんpaginate
。各ケースを言語で検索し、ページネーションも行いたいからです。
またはもちろん、インスタンス変数は、、 などで@books
はなく、コントローラー間で変更されます。@dvds
@games
params
また、メニュー リンク内のすべてを渡さなければならないことに気付きました。
= link_to 'with all CAPS', books_search_path(:term => 'search_all_caps', :language => params[:language])
そして、これを行うためのより良い方法が必要であると確信しています。
モデルの共通メソッドは、各モデルの先頭で呼び出すファイルで既に共有していますextend ModelFunctions
。detect_uppercase
このファイルには、上記で使用され、多くのコントローラーで共通のメソッドが含まれています。したがって、少なくとも私はその部分が機能しています:)
どんな助けでも大歓迎です。