首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在模型中调用ActionText是不是很糟糕?

在模型中调用ActionText是不是很糟糕?
EN

Stack Overflow用户
提问于 2010-02-17 05:06:59
回答 2查看 57关注 0票数 3

从ActiveRecord内部调用ActionText可以接受吗?

代码语言:javascript
复制
def last_updated
  updated_at? ? "Updated #{ActionText::time_ago_in_words(updated_at)} ago" : "never updated"
end

有反对这样做的理由吗?这应该是帮助器方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-02-17 06:05:10

是。根据严格的MVC教导,它是不好的形式,属于帮助器。

理论上:这个特定的功能块是特定于表示的,因此根据MVC的教导,它属于视图帮助器。

实际上:这真的无关紧要。我相信ActionText是在加载服务器/控制台时解析的。这意味着不需要再次加载该文件。而且,从内存管理方面来说,直接调用该方法可能比包含ActionText更好。

没有人会阻止您将此代码添加到模型中,也不会强迫您以正确的方式进行操作

就我个人而言,我更喜欢在模型中定义这些类型的方法,因为我发现实例方法(model.last_updated)的语法比帮助器(last_updated(model))的语法更美观。然而,ruby的动态特性让你可以两全其美。本质上是在模型上定义仅在视图中可用的实例方法。它所需要的只是一个额外的步骤。

如果你真的对这个额外的步骤感兴趣,它看起来就像这样:

代码语言:javascript
复制
module ModelHelper 
  def included(base)
    Model.send(:include, ModelInstanceMethods)
  end

  module ModelInstanceMethods
    def last_updated
      updated_at? ? "Updated #{ActionText::time_ago_in_words(updated_at)} ago" : "never updated"
    end
  end
end

其中Model是您希望此方法作为其一部分的模型的类名。

票数 1
EN

Stack Overflow用户

发布于 2010-02-17 11:36:56

我建议将其放在帮助器中,而不是放在模型中。这个方法似乎可以用来为视图生成内容,而这正是帮助程序的作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2276346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档