2010-02-16 27 views

回答

1

是的。根据严格的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 

哪里型号是您希望此方法是一部分的模型的类名。

0

我建议把这个放在助手而不是模型中。看起来这种方法将被用于为视图生成内容,这正是帮助者的目的。

相关问题