Como você pode tornar um modelo dentro de um layout usando linguagem de template líquido?

StackOverflow https://stackoverflow.com/questions/1283083

  •  16-09-2019
  •  | 
  •  

Pergunta

Eu estou tentando processar um modelo de líquido dentro de um layout líquido (modelo líquido lang, não CSS coisas layout líquido). Eu não consigo obter a parte de layout para renderizar. Atualmente usando:

assigns = {'page_name' => 'test'}
@layout = Liquid::Template.parse(File.new(@theme.layout.path).read)
@template = Liquid::Template.parse(File.new(self.template.path).read)

@rend_temp = @template.render(assigns)
@rend_layout = @layout.render({'content_for_layout' => @rend_temp})

render :text => @rend_layout, :content_type => :html

O HTML resultante dos shows de página que o 'modelo' prestados in fine líquido, mas não está envolvido com o layout (substituição de 'content_for_layout' no layout com o template renderizado)

Foi útil?

Solução

Só para que ninguém sabe quem se depara com este problema, o código postado acima realmente funcionar, o problema é com a variável chamada @template. I renomeado @template e @layout para @_tempalte e @_layout e tudo funciona como esperado.

Outras dicas

Para usar líquido em Ruby on Rails (especialmente Rails 3) - Eu acredito que a maneira correta para tornar seus modelos líquidos (e também manter todo o trabalho trilhos está fazendo por você) é o seguinte ...

A própria jóia líquido fornece uma liquid_view para os trilhos para que você possa conectar-se os trilhos para olhar para modelos de "líquido" quando você chamar # RENDER. Este liquid_view só funciona plenamente com Rails 2.3 mas pode ser facilmente atualizado para trabalhar com rails 3, fazendo a seguinte atualização

if content_for_layout = @view.instance_variable_get("@content_for_layout")
  assigns['content_for_layout'] = content_for_layout
elsif @view.content_for?(:layout)
  assigns["content_for_layout"] = @view.content_for(:layout)
end
assigns.merge!(local_assigns.stringify_keys)

Isto pode ser visto aqui -> https://github.com/danshultz/liquid/ commit / e27b5fcd174f4b3916a73b9866e44ac0a012b182

Em seguida, para processar corretamente a sua visão líquido apenas chamar

render :template => "index", :layout => "my_layout", :locals => { liquid_drop1 => drop, liquid_drop2 => drop }

Em nossa aplicação, uma vez que temos um punhado de atributos líquidos comuns que têm anulado a "render" método em nosso controlador de base para incluir automaticamente os locais padrão de referência #liquid_view_assigns que roll-up adicionalmente adicionados gotas de líquido para a chamada tornar

def render(...)
  options[:locals] = options.fetch(:locals, {}).merge(liquid_view_assigns)
  super
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top