2011-09-18 45 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。

相关问题