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

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

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

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

Ruby on Rails 6

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

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

Q&A

解決済

1回答

1324閲覧

rails6でView画面にデータハッシュが表示されてしまう

T.Adams

総合スコア40

Ruby

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

Ruby on Rails 6

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

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

0グッド

0クリップ

投稿2020/04/22 11:18

前提

Railsを用いたブログ形式のアプリを作成しています。

わからないこと

MVCモデルを使用し、DBに格納した情報をControllerを使用し取得し、Viewで表示しています。しかしビュー画面の最下部に、データがハッシュ形式で表示されてしまいます(以下の画面の赤丸部分)。
この部分が表示されないようにするためには、どうしたら良いかアドバイスいただけたらと幸いです。

イメージ説明

コード詳細

Controller

1class PostsController < ApplicationController 2 before_action :find_post, only: [:edit, :show, :destroy, :update] 3 4 def index 5 @posts = Post.order(created_at: :desc) 6 end 7end

View

1<div class="container"> 2 <h3>投稿一覧</h3> 3 <div class="row"> 4 <div class="col-md-4"> 5 <%= @posts.each do |post| %> 6 <p><%= post.user.name %></p> 7 <% end %> 8 </div> 9 </div> 10</div>

View

1<!DOCTYPE html> 2<html> 3 <head> 4 <title>Railsapp</title> 5 <%= csrf_meta_tags %> 6 <%= csp_meta_tag %> 7 8 <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 9 <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> 10 </head> 11 12 <body> 13 <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> 14 <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> 15 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> 16 17 <%= render 'shared/test_header'%> 18 19 <% flash.each do |message_type, message| %> 20 <div class="alert alert-<%= message_type %>"><%= message %></div> 21 <% end %> 22 23 <%= yield %> 24 </body> 25</html>

アプリ情報

  • Ruby2.7.1
  • Rails6.0.2.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

Viewの5行目を次のようにしてみてください。

ERB

1<% @posts.each do |post| %>

解説

<%= ... %><% ... %>の違いを意識してください。どちらもその中身をRubyのコードとして処理しますが、<%= ... %>はその式の実行結果を出力します。どういうことかというと、質問のコードのeachブロック部分について、ERBからRubyのコードにすると次のようになると言うことです。

Ruby

1print @posts.each do |post| 2 print '<p>' 3 print post.user.name 4 print '</p>' 5end

※ 実際は細かい改行あるなしがありますが、ここでは簡略化のために省略しています。

つまり、<%= ... %>としていると@posts.each do ~ endの結果をprintで出力してしまいます。eachはそのままレシーバーを帰しますので、その結果は@postsそのものです。これはPostモデルの配列になっているため、それを文字列に変換したものまで出力されてしまったと言うことです。

解決方法は最初に買い通り、出力しないように<% ... %>にすればよいとなります。ERBに関するさらに細かい動作は、次のドキュメントも参考にしてみてください。(RalisのERBは標準ライブラリの物と基本的に同じです)

投稿2020/04/22 11:42

編集2020/04/22 11:44
raccy

総合スコア21735

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

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

T.Adams

2020/04/22 11:53

ご返答ありがとうございます。 仰るとおりです(なんでこんな些細なことに気づかなかったのだろう)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問