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

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

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

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Slim

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

Q&A

解決済

1回答

7109閲覧

slimでのrenderの記述について

hunihuni

総合スコア7

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Slim

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

0グッド

0クリップ

投稿2016/08/17 09:24

#環境
Ruby on Rails 5
slim-rails

#状況
現在erbで書かれたviewをslimに変換しようとしています。
しかしrenderの記述が違うのか上手く行きません。

ソースコードは以下の通りです

app/controllers/timeline_controller.rb

class TimelineController < ApplicationController def show @posts = Post.all end end

app/views/post/_post.html.erb

<div class="timeline"> <p><%= posts.content %></p> </div>

app/views/timeline/show.html.erb

<h1>timeline</h1> <div id="timeline"> <%= render @posts %> </div>

上記の記述をslimを使い以下のように直しました

app/views/post/_post.html.slim

.timeline p=posts.content

app/views/timeline/show.html.slim

h1 =@timeline #timeline render 'post', @posts

このように記述すると

'post', @posts

という結果がでます

これを踏まえwikiを改めて確認すると
==renderという記述があり、それに記述し直し実行してみると

NoMethodError in Timeline#show /app/views/timeline/show.html.slim where line #4 raised: undefined method `keys' for #<Post::ActiveRecord_Relation:0x007faf0c5cf270>

というエラーになります。

slimの記述が得意な方ご教授お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下の記述でどうでしょうか。

slim

1h1 =@timeline 2 3#timeline 4 = render partial: 'post'

【補足】

slimの問題ではなく、rednerの使用を間違えているだけのように思います。
本件の内容であればerbとslimでメソッドの記述は変わらないはずなので、そもそも_post.html.erbもまともに表示されないと思うのですが、表示確認されているものでしょうか?

投稿2016/08/17 13:40

tkmtmkt

総合スコア1800

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

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

hunihuni

2016/08/18 06:26 編集

その通りでした。renderの使い方が違いました。 それに加えslimのか書き方が加わってきてごちゃごちゃになってしまいました。 _post.html.erbに関してですが、 「http://api.rubyonrails.org/classes/ActionView/PartialRenderer.html」 のRendering partials with layoutsあたりの機能でした。 今回はこれを使わず以下のように変更しました。 app/views/timeline/show.html.slim h1 =@timeline #timeline ==render "post/post", locals:{posts: @posts} app/views/post/_post.html.slim .timeline -@posts.each do |post| p=post.body end 以上ですありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問