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

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

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

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 5

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

2369閲覧

undefined local variable or methodエラーを解決したい

pi-nattu

総合スコア61

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 5

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/07/31 15:40

編集2022/07/31 16:25

質問内容

①Railsを使っておすすめの本を投稿できるアプリケーションを作成しています。
books.show.htmlを表示させたいのですが、インスタンス変数の設定がうまくできず困っています。
viewとcontrollerで足りない記述やいらない記述などがあるのかもしれないのですが、自力で解決できないので教えていただきたいです。

②もしよろしければ、変数の定義が苦手でこれでよく躓いてしまうので、なにか定義する時のコツ(気を付けたほうがいいことなど)を併せてあれば教えていただけると助かります。
カリキュラムを読んで一旦はわかった気になるのですが、実践するとどうも理解できていないと痛感します......

実現したいこと

Bookの詳細ページの表示をさせたいです。

発生している問題・エラーメッセージ

NameError in BooksController#show undefined local variable or method `book' for #<BooksController:0x00000007b36be8> Did you mean? @book

該当のソースコード

ruby

1def show 2 @book = Book.find(params[:id]) 3 @books = book 4 end

試したこと

インスタンス変数の定義・記述を調べて確認したのですが解決できませんでした。

補足情報(FW/ツールのバージョンなど)

Cloud9,EC2,t2.micro,Rails version: 6.1.6.1
Ruby version: ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]

ruby

1#views/books/show.html.erb 2<!DOCTYPE html> 3<html> 4 <head> 5 <body> 6 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> 7 <header> 8 <main> 9 <h1>Book detail</h1> 10 <%= render 'book', books: @books %> 11 <%= @books.each do |book| %> 12 <%= link_to book_path(book.id) do %> 13 <%= profile_image book.get_image %> 14 <%= link_to "Edit", edit_book_path(book.id) %> 15 <% end %> 16 <% if book.user == curent_user %> 17 <%= link_to "Destroy", books_path(book), method: :delete %> 18 <% end %> 19 <% end %> 20 </main> 21 </header> 22 </body> 23 </head> 24</html>

ruby

1#view/books/_book.html.erb 2<% books.each do |book| %> 3 <div> 4 <%= link_to user_path(book.id) do %> 5 <P><%= image_tag book.user.get_profile_image(100,100) %></P> 6 <% end %> 7 <h3>Title</h3><br> 8 <%= link_to book.title, book_path(book.id) %></p> 9 <h3>Opinion</h3><br> 10 <%= book.body %> 11 </div> 12<% end %>

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

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

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

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

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

guest

回答1

0

ベストアンサー

@books = bookbookは何を意図していますでしょうか?
すぐ上で定義した@bookのことであれば、@books = @book(@マークを入れる)と書くのが正解です。
なおこの場合、わざわざ@booksに入れ直す必要は無いと思います。

恐らくですが、
@book = Book.find(params[:id])でBookの中から該当するデータを1つ取り出して、showの画面に表示しようとしてますよね?
html.erbの方で<%= @books.each do |book| %>というように、@booksの中に複数データが入っている前提の記述がなされていますが、
@booksの中にはデータは1つしか入っていないので、eachは不要で、直接@bookから値を取り出せば良いと思います。
以下のような感じです

erb

1<%= @books.each do |book| %> 2 <%= link_to book_path(book.id) do %> 3 45 6<%= link_to book_path(@book.id) do %>

投稿2022/08/01 01:21

nae_stage

総合スコア274

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

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

pi-nattu

2022/08/01 01:49

回答ありがとうございます! >@book = Book.find(params[:id])でBookの中から該当するデータを1つ取り出して、showの画面に表示しようとしてますよね? その通りです。 先ほど自分でもeach文が不要なのでは、と行きつきました。 ご指摘の通り@books = bookの記述を削除し、@を付け、よく見たらcurrent_userもcurentとスペルミスしていたので修正したらエラー解決いたしました! わかりやすく説明してくださりありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問