iwhg0211
@iwhg0211 (h i)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

NoMethodError in Books#createが解決できません

解決したいこと

NoMethodError inの解決方法をお尋ねしたいです。

rubyのバージョンは3.1.2で、Railsのバージョンは6.1.6.1です。
Ruby on Railsで本のタイトルと説明を投稿できるアプリを開発しています。
バリデーションを実装しようとしていました。ただ、投稿フォームを空のまま投稿ボタンを押したのにNoMethodErrorが出てしまっている状態です。
解決方法を教えていただければ幸いです。

発生している問題・エラー

NoMethodError in Books#create

Showing /home/ec2-user/environment/bookers2/app/views/users/_list.html.erb where line #3 raised:

undefined method `profile_image' for nil:NilClassスクリーンショット 2022-09-02 10.33.26.png

Bookのコントローラー

### class BooksController < ApplicationController
  def new
  end

  def create
    @book = Book.new(book_params)
    @book.user_id = current_user.id
    if @book.save
       flash[:notice] = "You have created book successfully."
       redirect_to book_path(@book.id)
    else
       @books = Book.all
       render :index
    end
  end
,
,
,
  def book_params
    params.permit(:title,:body)
  end

end

Bookのモデル

class Book < ApplicationRecord
  belongs_to :user
  
  validates :title,presence: true
  validates :body,presence: true
end

app/views/users/_list.html.erb

<h1>User info</h1>

<% if user.profile_image.attached? %>
 <%= image_tag user.profile_image, size: "100×100" %>
<% else %>
 <%= image_tag 'no_image', size: "100×100" %>
<% end %>

<table>
 <thead>
  <tr>
   <th>name</th>
   <th>introduction</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><%= user.name %></td>
   <td><%= user.introduction %></td>
  </tr>
 </tbody>
</table>

<%= link_to 'edit', edit_user_path(user.id) %>

自分で試したこと

_list.html.erbにある<% if user.profile_image.attached? %>のuserがnilになっているので、bookコントローラーのcreateアクションに@user = user.profile.imageを入れてみたりしたのですが、解決しませんでした。

0

1Answer

自己解決しました。Book_controllerにuserの情報がなかったので、
def create
@book = Book.new(book_params)
@book.user_id = current_user.id
if @book.save
flash[:notice] = "You have created book successfully."
redirect_to book_path(@book.id)
else
@books = Book.all
@user = current_user ⇦ここ!
render :index
end
end

ここにユーザーの情報を入れてあげて、indexページに飛べるようにしてあげた。今回はbookのindexページにもログイン中のuserの情報が必要だからuserの情報をあげないとダメ。

0Like

Your answer might help someone💌