我在this blog中读到帮助方法不应直接与数据库交互或操纵视图数据。这些任务应由装饰者处理。
如果是这种情况,为什么我们通常将@current_user方法放在辅助模块中? (在Rails中)
答案 0 :(得分:1)
我将引用coderwall.com
的回顾助手
助手是一种通用方法,可用于不同类型的对象。我创建了这种助手
link_to_update
,big_image
,styled_form
等。这些方法创建了一个带有css样式或标准文本的html代码。局部模板
Partial用于将大视图拆分为较小的逻辑部分和较大的html代码。我可以有部分
side_menu
,comment_list
,header
等主持人
演示者可以使用两个或更多模型进行更复杂的查询。我有一些偏见,如
@page_presenter.page_in_category(ruby_category)
或@user_presenter.user_following(an_article)
。装饰
装饰者应该只使用一个模型,不应该采取参数(如果可能的话)。我可以执行类似
user.full_name
,page.big_title
或category.permalink
的操作。我使用宝石Draper。
因此,基本上decorators
是从单个模型对象获取数据并以某种方式操纵它的事物(例如,将first_name
+ last_name
压缩成full_name
等等。
current_user
绝对不属于装饰者,因为它不会处理操纵任何对象的数据 - 它实际上是finds
您需要的对象(使用会话/ cookie数据)。
我说它的位置在ApplicationController
(或者你可以建立的一个特定的后代,比如,AuthenticatedController
或者这样),因为你经常需要知道{{1}在控制器本身(而不是它的视图),并且需要花费不必要的努力使视图辅助方法可用于控制器。