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

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

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

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

1回答

257閲覧

htmlの中での<%= micropost.id %>のmicropostはモデル名ですか?

OHASI

総合スコア96

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

0グッド

0クリップ

投稿2023/02/03 13:24

編集2023/02/03 16:05

はじめに

rails初心者です。
現在、railsチュートリアルという教材を使用して、マイクロポストに画像を表示できるようにしているのですが、次の部分に疑問を持ったので質問させていただきます。

質問1

例えば、以下のようなコードの場合、<%= micropost.id %>micropostはモデル名ですか?
そう思った理由は、画像によるとモデル名は「Micropost」でテーブル名が「microposts」だからです。
イメージ説明

質問2

また、なぜコード2の<%= render @feed_items %>でファイル「_micropost.html.erb」(コード1)を呼び出せるのですか?

コード

コード1:「以下のようなコード」の全文

# ファイル名:views/microposts/_micropost.html.erb # ↓↓↓↓↓↓↓ここ↓↓↓↓↓↓↓ <li id="micropost-<%= micropost.id %>"> <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %> <span class="user"><%= link_to micropost.user.name, micropost.user %></span> <span class="content"> <%= micropost.content %> <% if micropost.image.attached? %> <%= image_tag micropost.image.variant(:display) %> <% end %> </span> <span class="timestamp"> Posted <%= time_ago_in_words(micropost.created_at) %> ago. </span> </li>

コード2:「コード1」を呼び出すファイル

# ファイル名:views/shared/_feed.html.erb <% if @feed_items.any? %> <ol class="microposts"> # ↓↓↓↓↓↓↓ここ↓↓↓↓↓↓↓ <%= render @feed_items %> </ol> <%= will_paginate @feed_items, params: { controller: :static_pages, action: :home } %> <% end %>

コード3:「コード2」の「@feed_items」を定義しているファイル

# ファイル名:controllers/microposts_controller.rb class MicropostsController < ApplicationController before_action :logged_in_user, only: [:create, :destroy] def create @micropost = current_user.microposts.build(micropost_params) @micropost.image.attach(params[:micropost][:image]) if @micropost.save flash[:success] = "Micropost created!" redirect_to root_url else # ↓↓↓↓↓↓↓ここ↓↓↓↓↓↓↓ @feed_items = current_user.feed.paginate(page: params[:page]) render 'static_pages/home', status: :unprocessable_entity end end def destroy end private def micropost_params params.require(:micropost).permit(:content, :image) end end

コード4:「コード3」の「current_user」を定義しているファイル

# ファイル名:helpers/sessions_helper.rb # 「@feed_items = current_user.feed.paginate(page: params[:page])」の「current_user」 # 記憶トークンcookieに対応するユーザーを返す def current_user if (user_id = session[:user_id]) @current_user ||= User.find_by(id: user_id) elsif (user_id = cookies.encrypted[:user_id]) user = User.find_by(id: user_id) if user && user.authenticated?(cookies[:remember_token]) log_in user @current_user = user end end end

コード5:「コード3」の「feed」を定義しているファイル

# ファイル名:models/user.rb # 「@feed_items = current_user.feed.paginate(page: params[:page])」の「feed」 def feed Micropost.where("user_id = ?", id) end

その他:User/Micropostの関連付け

図1

図1 MicropostとそのUserは belongs_to(1対1)の関係性がある

図2

図2 UserとそのMicropostは has_many(1対多)の関係性がある

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

maisumakun

2023/02/03 14:29

> 以下のようなコードの場合 そのコードより手前にあるコードと、当該のビューをどのように呼び出すかをご提示ください。
OHASI

2023/02/03 15:37

質問を編集いたしました。 これでよろしいでしょうか? 至らない点がありましたら、お手数をおかけしますがご教示いただきますようお願いします。
guest

回答1

2

ベストアンサー

質問1 例えば、以下のようなコードの場合、<%= micropost.id %>micropostはモデル名ですか?

一義的にはmicropostはローカル変数ですが、このmicropostという変数名はモデル名によって自動で決まります。

質問2 なぜコード2の<%= render @feed_items %>でファイル「_micropost.html.erb」(コード1)を呼び出せるのですか?

設定より規約といって、モデル名から自動でパーシャルが選ばれるように作ってあります。

投稿2023/02/03 22:19

maisumakun

総合スコア144592

OHASI, yuma.inaura👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

OHASI

2023/02/06 08:23

なるほど!勉強になりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.60%

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

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

質問する

同じタグがついた質問を見る

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。