これがセル定義内でモデル要求を行うための良いアプローチであるかどうか疑問に思っています....?
また、OOP の観点から、さまざまなコンテキストで検索結果のさまざまな表現を実装するためのより便利な方法を一般的に定義する必要もあります。
これは何のために必要ですか?
アイテムのカテゴリがあります。検索結果をセルとして実装したい。検索結果は、次の 3 つのケースに応じて少し異なる方法で表示する必要があります。
- 指定したカテゴリのすべてのアイテムを検索
たとえば、カテゴリを「動物」(このカテゴリには、データベース内の犬、猫、鳥の項目が含まれます) とすると、ブラウザに次のように表示されます。
Category Items dog cat bird
- 指定した「柄」に似た商品を全カテゴリから探す
たとえば、パターンを「do」にします。
Similar Items Animals dog Cars dodge
- 指定された「カテゴリ」内の指定された「パターン」に類似するアイテムを検索します
たとえば、パターンを「do」、カテゴリを「animals」にします。
Category Items dog Similar Items Cars dodge
これを実装するために、cells gem を試してみることにしました...
これは、セル経由で表示したいものです: (app/cells/search_result/display.html.haml)
%h1
= @category_items[:title]
%ul
- for i in @category_items[:items]
%li
= link_to "#{i.code} #{i.summary}", category_item_path(i.category.name, i.code)
%h1
= @similar_items_by_category[:title]
%ul
- for cat in @similar_items_by_category[:items_by_category].keys
%li
= "#{cat.name}"
%ul
- for i in @similar_items_by_category[:items_by_category][cat]
%li
= link_to "#{i.code} #{i.summary}", category_item_path(i.category.name, i.code)
これは私のセルです: (app/cells/search_result_cell.rb)
class SearchResultCell < Cell::Rails
def display options
setup! options
render
end
def setup! options
#some code here that defines
# category_items_title, like "Category Items"
# array_of_found_items
# similar_item_title, like "Similar Items"
# hash_of_found_items_by_category
#this code will be different for each search case in correspondent overridden function
@category_items = { title: category_items_title, items: array_of_found_items }
@similar_items_by_category = { title: similar_item_title, items_by_category: hash_of_found_items_by_category }
end
end
「検索」ケースごとに個別のセル クラスを用意し、それを SearchResultCell から派生させ (名前を GenericSearchResultCell のようなものに変更します)、セットアップをオーバーライドします! ケースごとの関数...そして、ビルダーを使用して、ビルドするクラスを定義します...
これは私の見解です: (app/views/items/index.html.haml)
= render_cell :search_result, :display #, ... - and here some options...
今質問:
「set!」内で実際の検索リクエストを行う必要があります。細胞内で機能しますか?そして、コントローラーの ItemsController をルートを「解析」し、そのオプションを SearchCell に渡すようにします...
または、ItemsController がルートの「解析」と検索リクエストの作成 (array_of_found_items と hash_of_found_items_by_category を単独で定義) の両方を担当するようにする必要がありますか? そして、このすべてのものをオプションとして SearchCell に渡すだけです...
このすべての「細胞実験」は価値がありますか? 「検索」ビューとコントローラーを実装するより便利な方法はありますか?