如果辅助方法不应直接与rails中的数据库交互,为什么我们将@current_user作为辅助方法?

时间:2015-08-13 10:41:07

标签: ruby-on-rails

我在this blog中读到帮助方法不应直接与数据库交互或操纵视图数据。这些任务应由装饰者处理。

如果是这种情况,为什么我们通常将@current_user方法放在辅助模块中? (在Rails中)

1 个答案:

答案 0 :(得分:1)

我将引用coderwall.com

的回顾
  

助手

     

助手是一种通用方法,可用于不同类型的对象。我创建了这种助手link_to_updatebig_imagestyled_form等。这些方法创建了一个带有css样式或标准文本的html代码。

     

局部模板

     

Partial用于将大视图拆分为较小的逻辑部分和较大的html代码。我可以有部分side_menucomment_listheader

     

主持人

     

演示者可以使用两个或更多模型进行更复杂的查询。我有一些偏见,如@page_presenter.page_in_category(ruby_category)@user_presenter.user_following(an_article)

     

装饰

     

装饰者应该只使用一个模型,不应该采取参数(如果可能的话)。我可以执行类似user.full_namepage.big_titlecategory.permalink的操作。我使用宝石Draper。

因此,基本上decorators是从单个模型对象获取数据并以某种方式操纵它的事物(例如,将first_name + last_name压缩成full_name等等。

另一方面,

current_user绝对不属于装饰者,因为它不会处理操纵任何对象的数据 - 它实际上是finds您需要的对象(使用会话/ cookie数据)。

我说它的位置在ApplicationController(或者你可以建立的一个特定的后代,比如,AuthenticatedController或者这样),因为你经常需要知道{{1}在控制器本身(而不是它的视图),并且需要花费不必要的努力使视图辅助方法可用于控制器。

相关问题