5

我将液体模板存储在数据库中,在渲染之前,我想检查是否提供了模板所需的所有参数 - 现在我发现了类似的东西:

parsed = Liquid::Template.parse(string_with_template)
required = parsed.instance_values["root"].instance_values["nodelist"].select{ |v| v.is_a?(Liquid::Variable) }.map(&:name)

然后在渲染之前我有一个功能

def has_all_required?(liquid_params, required)
  keys = liquid_params.keys
  required.each{|e| return false unless keys.include?(e) }
  return true
end

是否有更清洁的方法来实现此验证?

感谢所有建议,Santuxus

4

1 回答 1

2

我只是做了类似的事情,并在创建模板时对我的模板主体使用了自定义验证器,例如

validates :body, :presence => true, :email_template => true

然后我有一个 EmailTemplateValidator,它根据模板类型验证字段,例如

def validate_each(object, attribute, value)
    case object.template_type
    when 'registration'
        # registration_welcome emails MUST include the activation_url token
        if !value.include?('{{activation_url}}')
            object.errors[attribute] << 'Registration emails must include the {{activation_url}} token'
        end
    end    

结尾

然后计划将新案例块添加到验证器,因为应用程序中需要新模板以及它们必须包含的令牌。

于 2011-05-03T14:14:15.410 回答