我只是想知道这是否是在单元定义中发出模型请求的好方法......?
从 OOP 的角度来看,我还需要从总体上定义在不同上下文中为搜索结果实现不同表示的更方便的方法。
我需要这个做什么?
我有项目的类别。我想将搜索结果实现为一个单元格。根据三种情况,搜索结果应该以稍微不同的方式表示:
- 搜索指定类别中的所有项目
例如,让类别为“动物”(此类别包含:数据库中的狗、猫和鸟项目)然后我应该在浏览器中看到:
Category Items dog cat bird
- 在所有类别中搜索与指定“模式”相似的项目
例如让模式为“做”:
Similar Items Animals dog Cars dodge
- 在指定“类别”中搜索与指定“模式”相似的项目
例如,让模式为“做”,类别为“动物”:
Category Items dog Similar Items Cars dodge
我决定尝试使用细胞宝石来实现这些东西......
这就是我想通过单元格显示的内容:(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...
现在问题:
我应该在“设置!”中提出真正的搜索请求吗?在细胞中起作用?然后让我的控制器 ItemsController 只是“解析”路由,并提供要传递给我的 SearchCell 的选项......
或者我应该让我的 ItemsController 负责“解析”路由和发出搜索请求(自行定义 array_of_found_items 和 hash_of_found_items_by_category)?然后将所有这些东西作为选项传递给 SearchCell...
所有这些“细胞实验”值得吗?有没有更方便的方法来实现我的“搜索”视图和控制器?