Migrated from getting-liquid-to-work-in-rails v6

RichMorin
2010-08-12 13:45:49 -07:00
parent fa2aad914f
commit 1621eacccf
+18 -9
@@ -10,15 +10,16 @@ h3. Helpers become filters
A note about helpers. A note about helpers.
Liquid's Rails plugin tries to use your helpers as Filters. Liquid's Rails plugin tries to use your helpers as Filters.
Your helpers will always receive the piped-in text as the first parameter, and then any Filter parameters (passed after the colon). Your helpers will always receive the piped-in text as the first parameter,
and then any Filter parameters (passed after the colon).
Helper: Helper:
<pre> <pre>
module ApplicationHelper module ApplicationHelper
def truncate(input, length) def truncate(input, length)
input[0..length] + '...' input[0..length] + '...'
end end
end end
</pre> </pre>
Liquid: Liquid:
@@ -30,8 +31,10 @@ Liquid:
h2. Using Rails model data and methods in Liquid templates h2. Using Rails model data and methods in Liquid templates
When you pass variables to be available in a Liquid template, When you pass variables to be available in a Liquid template,
Liquid accepts a limited number of object types -- Strings, Arrays, Hashes, Numerics, and Booleans. Liquid accepts a limited number of object types --
If you'd like to pass your ActiveRecord (or other) objects to a Liquid template, you have three basic approaches: Strings, Arrays, Hashes, Numerics, and Booleans.
If you'd like to pass your ActiveRecord (or other) objects to a Liquid template,
you have three basic approaches:
The easy way is to add a @liquid_methods@ call: The easy way is to add a @liquid_methods@ call:
@@ -42,10 +45,14 @@ class Post < ActiveRecord::Base
</pre> </pre>
"Behind the scenes":http://github.com/tobi/liquid/tree/master/lib/liquid/module_ex.rb, "Behind the scenes":http://github.com/tobi/liquid/tree/master/lib/liquid/module_ex.rb,
@liquid_methods@ actually constructs a "Liquid Drop":http://liquid.rubyforge.org/classes/Liquid/Drop.html with the methods you include. This way, you have lazy loading (say, of associated models such as "comments" in the example above) of methods. @liquid_methods@ actually constructs a
"Liquid Drop":http://liquid.rubyforge.org/classes/Liquid/Drop.html with the methods you include.
This way, you have lazy loading
(say, of associated models such as "comments" in the example above) of methods.
An alternate route is to add a @to_liquid@ call in your object, An alternate route is to add a @to_liquid@ call in your object,
returning either one of the types listed above (string, array, hash, etc) or an object that in turn responds to @to_liquid@. returning either one of the types listed above (string, array, hash, etc)
or an object that in turn responds to @to_liquid@.
<pre> <pre>
class Post < ActiveRecord::Base class Post < ActiveRecord::Base
@@ -55,5 +62,7 @@ class Post < ActiveRecord::Base
end end
</pre> </pre>
Finally, you can write and register a completely new "Liquid Drop":http://liquid.rubyforge.org/classes/Liquid/Drop.html class. Finally, you can write and register a completely new
This enables you to pull from various models and helps you consolidate (lazy-loaded) methods used just for passing data to templates. "Liquid Drop":http://liquid.rubyforge.org/classes/Liquid/Drop.html class.
This enables you to pull from various models
and helps you consolidate (lazy-loaded) methods used just for passing data to templates.