2010-02-16 28 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

我建議把這個放在助手而不是模型中。看起來這種方法將被用於爲視圖生成內容,這正是幫助者的目的。

相關問題