從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
哪裏型號是您希望此方法是一部分的模型的類名。
我建議把這個放在助手而不是模型中。看起來這種方法將被用於爲視圖生成內容,這正是幫助者的目的。