Я думаю, что жидкость - это фантастическая система шаблонов.Поздравляю с исследованием / использованием.
По умолчанию ни один из методов модели не доступен для жидкого шаблона.Это хорошая вещь.Затем вы указываете, какие методы должны быть доступны.(Белый список.)
Я использую расширение для модуля, которое было отправлено в списке рассылки.Полное расширение ниже.Он обрабатывает создание Liquid :: Drop для вас, добавляя простой метод #liquid_methods к классам и модулям.
Затем в ваших моделях просто сделайте:
class Blog
# id
# name
has_many :posts
def latest_posts(n)
posts.latest(n) # using a named scope
end
def latest_10_posts;latest_posts(10); end
liquid_methods :id, :name, :posts, :latest_10_posts
end
Я неконечно, как / если вы можете передать параметры в капле.Спросите в списке рассылки Liquid.Я думаю, что вы можете.
Добавлено: Теперь я перечитал ваш вопрос и вижу, что вы действительно хотите отправить этот параметр в метод.Вы можете отправить более одного аргумента / параметра в жидкостный фильтр.Таким образом, у вас может быть фильтр:
# Define as a Liquid filter
def latest_posts(blog, n)
blog.latest(n)
end
# then call the filter in a template:
{{ blog2 | latest_posts: 10 }}
# Note that the second param is after the filter name.
В этом примере также помните, что вам также необходимо объявить жидкие методы в классе Post.
Вот расширение модуля.
# By dd -- http://groups.google.com/group/liquid-templates/browse_thread/thread/bf48cfebee9fafd9
# This extension is usesd in order to expose the object of the implementing class
# to liquid as it were a Drop. It also limits the liquid-callable methods of the instance
# to the allowed method passed with the liquid_methods call
# Example:
#
# class SomeClass
# liquid_methods :an_allowed_method
#
# def an_allowed_method
# 'this comes from an allowed method'
# end
# def unallowed_method
# 'this will never be an output'
# end
# end
#
# if you want to extend the drop to other methods you can define more methods
# in the class <YourClass>::LiquidDropClass
#
# class SomeClass::LiquidDropClass
# def another_allowed_method
# 'and this is another allowed method'
# end
# end
# end
#
# usage:
# @something = SomeClass.new
#
# template:
# {{something.an_allowed_method}}{{something.unallowed_method}}{{something.another_allowed_method}}
#
# output:
# 'this comes from an allowed method and this is another allowed method'
#
# You can also chain associations, by adding the liquid_method calls in the
# association models.
#
class Module
def liquid_methods(*allowed_methods)
drop_class = eval "class #{self.to_s}::LiquidDropClass < Liquid::Drop; self; end"
define_method :to_liquid do
drop_class.new(self)
end
drop_class.class_eval do
allowed_methods.each do |sym|
define_method sym do
@object.send sym
end
end
def initialize(object)
@object = object
end
end
end
end