He estado jugando con el motor de plantillas Liquid este fin de semana, y me pregunto si lo siguiente es posible.Pasando variables para modelar métodos de instancia en plantillas de Liquid
Supongo que tengo un método latest_posts
en un modelo Blog
, que puedo pasar un número entero para obtener las últimas N publicaciones. ¿Es posible usar ese método en una plantilla líquida?
Por ejemplo:
class Blog
has_many :posts
def latest_posts(n)
posts.latest(n) # using a named scope
end
def to_liquid(*args)
{
'all_posts' => posts.all, # allows me to use {% for posts in blog.all_posts %}
'last_post' => post.last, # allows me to use {% assign recent = blog.last_post %}
'latest_posts' => posts.latest_posts(args[0]) # how do I pass variables to this?
}
end
end
En el ejemplo simplificado anterior, en mis plantillas de líquidos que pueda usar blog.all_posts
y blog.last_post
, pero no tienen idea de cómo iba a hacer algo así blog.latest_posts: 10
.
¿Alguien puede apuntarme en la dirección correcta?
Una idea en la que pensé fue crear un filtro de Liquid y pasar el objeto Blog y un entero a eso. Algo así como:
{% for post in blog | latest_posts(10) %}
- pero no han probado todavía cuando la persona sienta que estoy punzante alrededor en el un poco oscuro. Agradecería la ayuda de los usuarios de Liquid más experimentados.
Gracias por la información del método before_method. Estoy de acuerdo en que es un poco raro, pero recuerde que el foco de Liquid es la plantilla, no la maquinaria detrás de la plantilla. La intención es permitir que otros grupos de personas usen solo el lenguaje de plantilla para hacer vistas de datos útiles/sofisticadas de una manera segura. Creo que es muy bueno para eso, tanto mis clientes como sus contratistas usan plantillas Liquid con mis datos SAAS. –