LoginSignup
3
1

More than 5 years have passed since last update.

コントローラ以外で Slim のテンプレートを描画する

Last updated at Posted at 2018-03-07

HTML を描画する処理をヘルパやデコレータで content_tag や concat を駆使して書いていると、コードの行数がどうしても膨らんでしまう。そのためヘルパやデコレータから Slim の機能を使って Slim テンプレートを描画してみる。

app/views/components/context_menu/item.html.slim
li disabled=disabled
  a.js-context-menu-item data-method=(method || :get) href=url
    = body
locals = { disabled: true.to_s, method: :get, url: '#', body: 'リンク' }
slim_path = Rails.root.join('app/views/components/context_menu/item.html.slim')

Slim::Template.new(slim_path).render(Object.new, locals)
#=> "<li disabled=\"true\"><a class=\"js-context-menu-item\" data-method=\"get\" href=\"#\">リンク</a></li>"

次のようにヘルパメソッド化すると便利。

# app/views/components ディレクトリ以下の Slim ファイルを描画する。
def render_component(name, locals = {}, options = {}, &block)
  slim_path = Rails.root.join('app/views/components', "#{name}.html.slim")

  Slim::Template.new(slim_path, options).render(Object.new, locals, &block)
end
3
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1