質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

Q&A

解決済

1回答

4888閲覧

slim/includeを利用してslimからslimを読み込む時に値を渡したい

hojo

総合スコア195

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Slim

SlimはPHPアプリケーションを開発するための軽量なマイクロフレームワークです。

0グッド

0クリップ

投稿2016/06/04 00:07

rubyでslimを利用しています。

ruby

1require 'slim' 2 3hash = {hoge: 1, fuga: 2} 4print Tilt.new("#{ROOT}/test.slim").render(self, hash)

上記のコードを書くことで、test.slimの内容がhtmlに変換されて出力されるはずです。

そして、slimの中でパラメータを利用したい場合、hashとして値を渡しslim内部で#{hoge}などとすることで値を出力させることができるというところまでわかりました。

hoge.slim

slim

1doctype html 2html lang="ja" 3 body 4 p hogeは#{hoge}です。

しかし、上記のslimファイルをslim/includeを利用して他slimからincludeした場合、hogeの内容が存在しないのでエラーが出てしまいます。

main.slim

slim

1doctype html 2html lang="ja" 3 body 4 5 // hoge.slimを読み込むがhogeが存在しないのでエラー 6 include hoge

include hoge, {hoge:1}のような記述をすることで、パラメータを渡すことができれば良いのですが、公式ページを見てもドキュメントの内容が薄いためにどのようにすれば良いかわかりませんでした。

https://github.com/slim-template/slim/blob/master/doc/include.md

slimから他slimを読み込むと同時にパラメータを渡すことはできないかもしれません。もしできない場合、より良い解決策がありましたらその手法を教えていただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

print Tilt.new("#{ROOT}/test.slim").render(self, hash) と同じでよいのであれば、以下の通りrenderメソッドを使用すればよいと思います。
renderで呼び出すテンプレートのファイル名は、先頭にアンダーバーを付ける必要があります。

_test.slim

slim

1doctype html 2html lang="ja" 3 body 4 p = "hogeは#{hoge}です。" 5 p = "fugaは#{fuga}です。"

main.slim

slim

1doctype html 2html lang="ja" 3 body 4 5 - hash = {hoge: 1, fuga: 2} 6 == render 'test', hash

追記

rails使用しているものと思い込んでいました。
railsなしで試してみたところ、エラーにはなりませんでした。
試した内容は以下の通りです。

Gemfile

Gemfile

1source 'https://rubygems.org' 2 3gem 'slim'

main.rb

ruby

1require 'bundler' 2Bundler.require 3 4require 'slim/include' 5 6hash = {hoge: 1, fuga: 2} 7 8print Tilt.new("main.slim").render(self, hash)

main.slim

slim

1doctype html 2html lang="ja" 3 body 4 5 include test

test.slim

slim

1p hogeは#{hoge}です。 2p fugaは#{fuga}です。

実行

sh

1$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/ Fetching version metadata from https://rubygems.org/ Installing temple 0.7.7 Installing tilt 2.0.5 Using bundler 1.12.5 Installing slim 3.0.7 Bundle complete! 1 Gemfile dependency, 4 gems now installed. Bundled gems are installed into ./vendor/bundle.

sh

1$ ruby main.rb

html

1<!DOCTYPE html><html lang="ja"><body><p>hogeは1です。</p><p>fugaは2です。</p></body></html>

投稿2016/06/04 03:21

編集2016/06/04 09:33
tkmtmkt

総合スコア1800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hojo

2016/06/04 05:14

undefined method `render' というエラーが発生してしまいました。
hojo

2016/06/04 09:16

どうやらフレームワークを利用していなかったことが問題だったようです。
tkmtmkt

2016/06/04 09:35

先入観でrails使用しているものと思い込んでしました。 rails無しで試してみたところ、特に問題は無いようでしたので、呼び出し方がまずかったのではないでしょうか? 参考のため、自分が試した内容を追記しておきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問