Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Rails with Liquid

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でシンタックスハイライトが利用できます。

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
18
Help us understand the problem. What are the problem?