2011-05-03 3 views
5

나는 액체 템플릿을 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) 

그리고 나서 렌더링 전에 함수

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

이 유효성 검사를 수행하는 더 깨끗한 방법이 있습니까?

모든 제안 주셔서 감사합니다, Santuxus

답변

1

난 그냥 예를 들어

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  

에 대한 필드

계획에 포함되어야하는 토큰이있는 앱에 새 템플릿이 필요하므로 새로운 케이스 블록을 유효성 검사기에 추가하는 것이 좋습니다.

+0

문제는 관리자 패널에서 템플릿을 편집 할 수 있기 때문에 필요한 모든 값을 알고 있다면 일반적인 방법이 필요하다는 것입니다. 예를 들어 답을 주셔서 감사합니다.) 예를 들면 다음과 같습니다. page_title의 값은 'This is {{product_name}}'이며 '{product_price}}'의 {{product_name}}입니다. – santuxus