从ActiveRecord内部调用ActionText是可以接受的吗?在模型中调用ActionText是否是不好的形式?
def last_updated
updated_at? ? "Updated #{ActionText::time_ago_in_words(updated_at)} ago" : "never updated"
end
有反对做这样的事情的说法?这应该是一个辅助方法吗?
从ActiveRecord内部调用ActionText是可以接受的吗?在模型中调用ActionText是否是不好的形式?
def last_updated
updated_at? ? "Updated #{ActionText::time_ago_in_words(updated_at)} ago" : "never updated"
end
有反对做这样的事情的说法?这应该是一个辅助方法吗?
是的。根据严格的MVC教导,这是一种糟糕的形式,属于帮手。
理论上:这个特殊的功能块是特定于表示的,因此通过MVC的教导它属于视图助手。
在实践中:这真的没有关系。我相信当加载服务器/控制台时会解析ActionText。这意味着文件不需要再次加载。直接调用方法而不是包含ActionText在内存管理方面可能会更好。
没有身体会从将此代码添加到模型停止或强迫你做的事情正确的方式
我个人比较喜欢,只是因为我觉得界定这些种方法模型实例方法的语法(model.last_updated
)比助手(last_updated(model)
)更美观。然而,ruby的动态性让你可以双向使用它。基本上定义您的模型上的实例方法只能在视图中使用。它只需要一个额外的步骤。
如果你在这个额外的步骤很感兴趣,它应该是这样的:
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
哪里型号是您希望此方法是一部分的模型的类名。
我建议把这个放在助手而不是模型中。看起来这种方法将被用于为视图生成内容,这正是帮助者的目的。