【Ruby on Rails】@articleとarticleの違い(ローカル変数とインスタンス変数の違い)
2024/1からプログラミングスクールに通っている、プログラミング初学者です。
2024/6/28より自分自身のアウトプットのために、毎日投稿をしています。
初学者の投稿になるため間違い等ございましたら、優しくご指摘いただけますと幸いです。
今回の記事を書いた理由
現在Ruby on Railsを使用し、記事アプリを作成しております。
その中で理解の浅かった部分が明るみになったので、今回はその内容を書いていきたいと思います。
大雑把なタイトルですが、@articleとarticleの違い(ローカル変数とインスタンス変数の違い)についてです。
アプリ作成をする中で、
- 記事一覧画面から、記事の詳細へ画面遷移する
- 記事詳細画面上に、編集・削除ボタンを実装する
この2つの処理を行いました。
記事一覧画面から記事本文の詳細画面へ遷移させるため、viewファイル(index.html.erb)では
<%= link_to article.title, article_path(article) %>
と実装し、
記事詳細画面上では、編集・削除ボタンを設置しています。
下記がそのviewファイル(show.html.erb)です。
<%=link_to '編集', edit_article_path(@article)%>
<%=link_to '削除', article_path(@article) %>
今回@articleとarticleの違い(ローカル変数とインスタンス変数の違い)が理解できていないと感じたのは、実装する中で
<%= link_to article.title, article_path(@article) %>
@articleとarticleの違い(ローカル変数とインスタンス変数の違い)
私自身が理解できていなかったのは、ローカル変数とインスタンス変数の使い方でした。
エラーを読み解き、ChatGPTにも確認しながら出した結論です。
記事一覧画面から、記事の詳細へ画面遷移するviewファイル(index.html.erb)
<% if @articles.present? %>
<% @articles.each do |article| %>
<%= link_to article.title, article_path(article) %>
<% end %>
<% end %>
の中の、article_path(article)で参照しているのは、一覧画面に複数表示されている中の記事の1つ。
index.html.erbでは、もし投稿が存在する場合には、記事を1つずつを表示するようeach文で回しています。そのeach文のループ内で回しているarticle(ローカル変数)の本文詳細を参照したいため、article_path(article)の表記となっている。
記事詳細画面上に、編集・削除ボタンを実装するviewファイル(show.html.erb)
<%= link_to article.title, article_path(@article) %>
ここでは、Articlesコントローラーのedit, destroyアクションで定義している@articles(インスタンス変数)を参照しているため、@ariticleとなる。
@article = current_user.articles.find(params[:id])
と定義しているため、特定の記事を編集削除できる。
頭では理解しているつもりでしたが、改めてローカル変数とインスタンス変数の違いを学ぶことができました。
ありがとうございました。
Discussion