san*_*xus 5 ruby-on-rails liquid
我有液体模板存储在DB中,在渲染之前,我想检查一下,如果提供了模板所需的所有参数 - 现在我发现了类似的东西:
parsed = Liquid::Template.parse(string_with_template)
required = parsed.instance_values["root"].instance_values["nodelist"].select{ |v| v.is_a?(Liquid::Variable) }.map(&:name)
Run Code Online (Sandbox Code Playgroud)
然后在渲染之前我有一个功能
def has_all_required?(liquid_params, required)
keys = liquid_params.keys
required.each{|e| return false unless keys.include?(e) }
return true
end
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的方法来实现这种验证?
感谢所有的建议,Santuxus
我只是做了类似的事情,并在创建模板时对模板主体使用自定义验证器,例如
validates :body, :presence => true, :email_template => true
Run Code Online (Sandbox Code Playgroud)
然后我有一个 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
Run Code Online (Sandbox Code Playgroud)
结尾
然后,计划是将新的 case 块添加到验证器,因为应用程序中需要新模板及其必须包含的令牌。
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |