🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

解決済

1回答

1017閲覧

エラー undefined method `image' for nil:NilClass の解決方法

Aker

総合スコア15

Ruby

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Ruby on Rails

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2019/09/30 02:58

前提・実現したいこと

Railsでポートフォリオが完成し、herokuにデプロイしたのですが、数日後見ると、エラーが発生しており、見れなくなっていました。デプロイした時点では、正常に稼働していました。本番環境でエラーを修正したのですが(AWS S3関連のエラー?)、その後また別のエラーが出てきて、開発環境で見ると、下記のようなエラーメッセージが出ていました。元々動いていたのでデータベース関連のエラーなのかな?と思います。初学者のためどこを載せたらいいのかわからないので、足りなければご教授願います。Github https://github.com/Taiki130/Bookthink

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

イメージ説明

エラーメッセージ
undefined method `image' for nil:NilClass

該当のソースコード

slim

1h1 ホーム 2= search_form_for @q, class: 'mb-5' do |f| 3 .form-group.row 4 = f.label :title_cont, '本の名前', class: 'col-sm-2 col-form-label' 5 .col-sm-10 6 = f.search_field :title_cont, class: 'form-control' 7 .form-group.row 8 = f.label :author_cont, '著者', class: 'col-sm-2 col-form-control-label' 9 .col-sm-10 10 = f.search_field :author_cont, class: 'form-control' 11 .form-group 12 = f.submit class: 'btn btn-outline-primary' 13 14 = paginate @books 15 = page_entries_info @books 16 17- @books.each do |book| 18 = image_tag book.user.image, class: 'img-thumbnail book-user-image rounded mr-3 mb-2' if book.user.image.attached? 19 = book.user.name 20 = link_to '投稿の詳細', book_path(book), class: 'btn btn-outline-primary ml-5 mb-2' 21 22 table.table.table-hover.table-sm.table-active 23 tbody 24 tr 25 th.text-nowrap 本の名前: 26 td= book.title 27 tr 28 th.text-nowrap 著者: 29 td= book.author 30 tr 31 th.text-nowrap 画像 32 td= image_tag book.image, class: 'book-image' if book.image.attached? 33 tr 34 th.text-nowrap 感想・レビュー: 35 td= book.review 36 37.mb-3 38 = paginate @books 39 = page_entries_info @books

ruby

1class BooksController < ApplicationController 2 skip_before_action :login_required, only: [:index, :show] 3 before_action :set_book, only: [:edit, :update, :destroy] 4 5 def index 6 @q = Book.all.ransack(params[:q]) 7 @books = @q.result(distinct: true).order(updated_at: :desc).page(params[:page]).per(10) 8 end 9 10 def show 11 @book = Book.find(params[:id]) 12 @user = User.find_by(id: @book.user_id) 13 end 14 15 def new 16 @book = Book.new 17 end 18 19 def create 20 @book = current_user.books.new(book_params) 21 if @book.save 22 redirect_to @book, notice: "「#{@book.title}」の感想・レビューを書きました。" 23 else 24 render :new 25 end 26 end 27 28 def edit 29 end 30 31 def update 32 @book.update(book_params) 33 redirect_to books_url, notice: "「#{@book.title}」の感想・レビューを更新しました。" 34 end 35 36 def destroy 37 @book.destroy 38 redirect_to books_url, notice: "「#{@book.title}」の感想・レビューを削除しました。" 39 end 40 41 private 42 43 def set_book 44 @book = current_user.books.find(params[:id]) 45 end 46 47 def book_params 48 params.require(:book).permit(:title, :author, :review, :image) 49 end 50end

ruby

1class UsersController < ApplicationController 2skip_before_action :login_required, only: [:new, :create, :show, :index] 3 4 def new 5 @user = User.new 6 end 7 8 def create 9 @user = User.new(user_params) 10 11 if @user.save 12 redirect_to root_url, notice: "ユーザー「#{@user.name}」を登録しました。" 13 else 14 render :new 15 end 16 end 17 18 def edit 19 @user = User.find(params[:id]) 20 end 21 22 def update 23 @user = User.find(params[:id]) 24 25 if @user.update(user_params) 26 redirect_to "/users/#{@current_user.id}", notice: "ユーザー「#{@user.name}」を更新しました。" 27 else 28 render :edit 29 end 30 end 31 32 def show 33 @user = User.find(params[:id]) 34 end 35 36 37 def index 38 @q = User.all.ransack(params[:q]) 39 @users = @q.result(distinct: true).order(created_at: :desc).page(params[:page]).per(10) 40 end 41 42 def destroy 43 @user = User.find(params[:id]) 44 @user.destroy 45 redirect_to root_url, notice: "ユーザー「#{@user.name}」を削除しました。" 46 end 47 48 private 49 50 def user_params 51 params.require(:user).permit(:name, :email, :password, :password_confirmation, :image) 52 end 53 54end

ruby

1class ApplicationController < ActionController::Base 2 helper_method :current_user 3 before_action :login_required, :current_user 4 5 private 6 7 def current_user 8 @current_user ||= User.find_by(id: session[:user_id]) if session[:user_id] 9 end 10 11 def login_required 12 redirect_to login_url unless current_user 13 end 14end

試したこと

他に同じような質問をしている記事を探して、見たのですが何がおかしいのかよくわかりませんでした。

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

Rails 6.0.0

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

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

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

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

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

guest

回答1

0

ベストアンサー

undefined method 'image' for nil:NilClassとなっているため、book.usernilクラスとなっているようです。

- @books.each do |book| - if book.user.present? = image_tag book.user.image, class: 'img-thumbnail book-user-image rounded mr-3 mb-2' if book.user.image.attached? = book.user.name = link_to '投稿の詳細', book_path(book), class: 'btn btn-outline-primary ml-5 mb-2'

該当箇所をこんな感じにしてみてはいかがでしょうか

投稿2019/09/30 03:11

編集2019/09/30 09:45
haneru

総合スコア440

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

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

Aker

2019/09/30 13:01

ありがとうございます!お陰でなんとかなりそうです!!感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問