Ich habe dieses Wochenende mit der Liquid-Template-Engine herumgespielt, und ich frage mich, ob das Folgende möglich ist.Übergeben von Variablen zum Modellieren von Instanzmethoden in Liquid-Vorlagen
Angenommen, ich habe eine latest_posts
Methode in einem Blog
Modell, das ich eine Ganzzahl übergeben kann, um die neuesten N Beiträge zu erhalten. Ist es möglich, diese Methode in einer flüssigen Vorlage zu verwenden?
Zum Beispiel:
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
In dem vereinfachten Beispiel oben, in meinen flüssigen Vorlagen kann ich blog.all_posts
und blog.last_post
, habe aber keine Ahnung, wie ich so etwas wie blog.latest_posts: 10
tun würde.
Kann mir jemand in die richtige Richtung zeigen?
Eine Idee, an die ich gedacht habe, war, einen Liquid-Filter zu erstellen und sowohl das Blog-Objekt als auch eine ganze Zahl zu übergeben. Etwas wie:
{% for post in blog | latest_posts(10) %}
- aber nicht versucht haben, dass noch als Gefühl, wie ich bin Messerstecherei im Dunkeln ein wenig. Ich würde etwas Hilfe von erfahreneren Liquid-Benutzern zu schätzen wissen.
Danke für die Infos zum before_method. Ich stimme zu, dass es ein wenig hacky ist, aber denken Sie daran, dass der Fokus für Liquid die Vorlage ist, nicht die Maschinerie hinter der Vorlage. Die Absicht besteht darin, anderen Gruppen von Personen zu ermöglichen, nur die Vorlagensprache zu verwenden, um nützliche/anspruchsvolle Ansichten von Daten auf eine sichere Weise zu machen. Ich denke, es ist sehr gut dafür - sowohl meine Kunden als auch ihre Vertragspartner verwenden Liquid-Templates mit meinen SAAS-Daten. –