Ruby 获取所有公共方法和属性getter,并将它们传递给liquid\u方法

Ruby 获取所有公共方法和属性getter,并将它们传递给liquid\u方法,ruby,ruby-on-rails-3,liquid,Ruby,Ruby On Rails 3,Liquid,如果我们想从液体模板访问方法,我们需要在我们的模型中将它们声明为liquid\u方法,如下所示: class User < ActiveRecord::Base liquid_methods :name, :adress, :any_method_we_want ... class用户

如果我们想从液体模板访问方法,我们需要在我们的模型中将它们声明为
liquid\u方法
,如下所示:

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

  ...
class用户
问题是我们的模型定义了很多东西(属性和公共方法),管理它们是一个很重要的目标,当我们添加新的方法时,不要忘记将它们声明为liquid_方法,更不用说模型顶部的一个非常丑陋的列表了。所以问题是,我想声明所有属性getter和public方法都应该被“液化”,有没有一种比总是手动声明它们更为奇特的方式来让liquid像示例中那样可访问?你会怎么做

要在伪代码中获得类似的要点(可能不起作用):

class用户
我使用液体,也有同样的问题。以下是我反对你提出的解决方案的建议:

Liquid的全部目的是不向编写Liquid模板的随机用户过度暴露应用程序的数据或方法

(如果你只让信任的人编写模板,那么不要使用液体,而是使用erb、haml、dryml或其他选择

如果你有两组人(受信任和不受信任),那么让你信任的人使用一种模板,并将不受信任的人发送到Liquid。)

如果您在默认情况下公开了您的方法,那么要测试您没有公开太多就困难多了

当然,你最终会得到一个丑陋的方法列表,你将这些方法暴露在液体模板中。但是那样的话,你肯定只有那些方法被公开了

相反,只需添加关于什么应该通过液体暴露的测试。然后,您将确保所需的最小值将暴露在液体模板中

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

  liquid_methods methods

  ...