Help us understand the problem. What is going on with this article?

Rails with Liquid

More than 5 years have passed since last update.

LiquidRubyで記述されたテンプレートエンジンです。
ShopifyJekyllなどで利用されています。

LiquidはERBとは違い、独自のレキサーとパーサーで解析をするので
エンドユーザーにテンプレートの編集機能を安全に提供できます。
(ShopifyではEmail Templatesで利用されています。)

Example

Railsでの簡単な使い方を紹介します。
(Liquid DesignersLiquid Outputが参考になりました。)

Gemfile

Gemliquidを追加します。

gem 'liquid'

Models

Modelliquid_methodsにテンプレートで利用するキーワードを追加します。

product

liquid_methodsに指定したキーワードのみがテンプレートで利用できます。(安心ですね!)

class Product < ActiveRecord::Base
  liquid_methods :title, :vendor, :variants
  has_many :variants
end

variant

ProductVariantは1対多の関係です。(Railsではおなじみですね!)

class Variant < ActiveRecord::Base
  liquid_methods :title, :price
  belongs_to :product
end

Controllers & Views

GET /catalogsでヒアドキュメントのテンプレートがレンダリングされます。
(オリジナルのExample snippetを参考にしています。)

class CatalogsController < ApplicationController
  before_action :set_products, only: [:index]

  def index
    render text: Liquid::Template.parse(template).render('products' => @products).html_safe
  end

  private
    def set_products
      @products = Product.all
    end

    def template
      <<-EOS
      <ul id="products">
        {% for product in products %}
          <li>
            <h2>{{ product.title }}</h2>
            <ul>
              {% for variant in product.variants %}
                <li>
                  <h3>{{ variant.title }}</h3>
                  Only {{ variant.price | format_as_money }}
              {% endfor %}
            </ul>
          </li>
        {% endfor %}
      </ul>
      EOS
    end
end

コードはGitHubに公開しています。

Tips

Editor

Sublime TextにはパッケージのLiquid Syntaxでシンタックスハイライトが利用できます。

ogomr
RubyKansai, naniwa.rb, DDD.rb, CoderDojo Osakasayama/Hommachi, OSS Gate Osaka, Rails Girls Osaka, Open Source Software Developers Osaka, テクノ図工部
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした