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

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

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

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

Q&A

解決済

1回答

206閲覧

html内の画像指定のやり方がなぜこうなるか理解できない

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

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

0グッド

0クリップ

投稿2018/11/26 02:32

プログラミング学習サイトで勉強中です!よく意味が理解できない文法があったので、質問しています。

rails

1class UsersController < ApplicationController 2 3 def index 4 @users = User.all 5 end 6 7 def show 8 @user = User.find_by(id: params[:id]) 9 end 10end

show.html

<div class="main user-show"> <div class="container"> <div class="user"> <!-- <img>タグを用いて、プロフィール画像を表示してください --> <img src = "<%=" /user_images/#{@user.image_name}"%>"> <h2><%= @user.name %></h2> <p><%= @user.email %></p> <%= link_to("編集", "/users/#{@user.id}/edit") %> </div> </div> </div>

index.html

<div class="main users-index"> <div class="container"> <h1 class="users-heading">ユーザー一覧</h1> <% @users.each do |user| %> <div class="users-index-item"> <div class="user-left"> <img src = "<%=" /user_images/#{user.image_name}"%>"> </div> <div class="user-right"> <%= link_to(user.name, "/users/#{user.id}") %> </div> </div> <% end %> </div> </div>

indexの <img src = "<%=" /user_images/#{user.image_name}"%>">
の#{user.image_name}が意味がよくわかりません。
show.htmlみたいに#{@user.image_name}を使いたくて、コントローラに @user = User.find_by(id: params[:id])を書いたらブラウザに正しく表示されず、答えを見たら<img src = "<%=" /user_images/#{user.image_name}"%>">が書かれていました。私はよく理解できません。なぜこのように書いて成立するのか教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

indexアクションでは、複数個Userを扱うので、@usersという複数形の名前になった変数に、複数のUserが入っています。そして、@users.each do |user|で、1つずつuserに取り出しています。


Railsでは、<%= ... %>の中身だけが処理されて、<img src="/user_images/(名前)">のようなHTMLを生成します。そして、それがHTMLとしてブラウザに解釈されます。

もっとも、このようにHTMLの一部にRailsから値を入れるのは、XSSの危険などもあるので、おすすめできませんimage_tagのようなヘルパーを使いましょう。

erb

1<%= image_tag "/user_images/#{@user.image_name}" %>

投稿2018/11/26 02:41

編集2018/11/26 02:46
maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2018/11/26 02:50

なるほど!!! スッキリできました!! 今までなんとなく、each文を書いていたので、maisumakunさんの回答で理解できた気がします! なるほど。そうなんですね。自分で作る時はimage_tagを使って見ます!
maisumakun

2018/11/26 02:53

Railsの場合、単数形複数形の違いにもきっちり意味がありますので、しっかり把握していきましょう(例えば、モデルクラスは単数形なのに対して、テーブル名やコントローラー名は複数形です)。
退会済みユーザー

退会済みユーザー

2018/11/26 08:01

それも謎なんですよね〜。笑 ブログとか読んでると、わからないところは飛ばしたほうが良いと書いてあるので、できるだけ飛ばしてます。笑
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問