2011-09-18 49 views
0

如果我們想使我們需要把它們聲明爲我們的模型liquid_methods從液體模板訪問的方法,像這樣:獲取所有公共方法和屬性的getter和傳遞他們liquid_methods

class User < ActiveRecord::Base 
    liquid_methods :name, :adress, :any_method_we_want 

    ... 

的東西是我們的模型中定義了很多東西(屬性和公共方法),這將是一個非常有用的目標,當我們添加新的模型時,不要忘記將它們聲明爲liquid_methods,更不要說模型頂部的一個非常醜陋的列表。所以問題是,我想聲明所有屬性獲取器和公共方法應該被「液化」,是否有一種更奇特的方式,而不是像手動例子那樣總是手動聲明它們的液體?你會怎麼做?

獲得分數是這樣的僞代碼(可能不工作):

class User < ActiveRecord::Base 
    methods = self.public_methods + self.attribute_names 

    liquid_methods methods 

    ... 

回答

2

我用液體和有同樣的問題。以下是我對您建議的解決方案的建議:

Liquid的全部目的是不會將您的應用程序的數據或方法暴露給寫入Liquid模板的隨機人員。

(如果你只會有信任的人寫的模板,那麼就不要使用液體,而是使用ERB,HAML,dryml或其他選擇。

如果你有兩撥人(信任和不信任),然後讓你信任的人使用一種類型的模板,並將不可信任的人員發送給Liquid。)

如果默認情況下公開你的方法,那麼測試你沒有暴露得太多就更困難了。

當然,你最終會遇到一個醜惡的你正在接觸Liquid模板的方法列表。但那樣,你肯定只有這些方法正在被暴露。

相反,只需添加有關應通過液體暴露的測試。然後你可以確定所需的最小值將暴露給Liquid模板。

HTH。

相關問題