#開発環境
Ruby 2.5.0
Ruby on Rails 5.2.2
macOS 10.14.1
htmlではなく、slimをつかって記述しています。
#はじめに
練習として、ツイッターのコピーアプリを作成しています。
ユーザーのプロフィールに画像を表示するために、Active Storage の機能を使って実装を試みました。
avatarとして画像を出力したいです。
具体的に、image_tag @user.avatarのようにしたいです。
Qiitaの投稿
【Rails 5.2】 Active Storageの使い方
書籍
現場で使える Ruby on Rails 5速習実践ガイド
上記を参考に実装しました。
#エラーメッセージ
avatarが未定義だとエラーがでます。
この原因がわかりません。
NoMethodError in Users#index undefined method `avatar' for nil:NilClass #user_profile .user_image = image_tag @user.avatar if @user.avatar.attached? .user_name p= @current_user.name+"さん"
#実際のコード
models/user.rb
class User < ApplicationRecord . . has_one_attached :avatar . . end
controllers/users_contoroller.rb
ruby
1. 2. 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 session[:user_id] = @user.id 13 flash[:notice] = "ユーザー登録が完了しました" 14 redirect_to users_path 15 else 16 render :signup 17 end 18 end 19 20 def edit 21 @user = User.find_by(id: params[:id]) 22 end 23 24 def update 25 @user = User.find_by(id: params[:id]) 26 if @user.update(user_params) 27 flash[:notice] = "ユーザーを編集しました" 28 redirect_to users_path 29 else 30 render :edit 31 end 32 end 33. 34. 35. 36 37 def user_params 38 params.require(:user).permit(:name, :email, :password, :password_confirmation, :avatar) 39 end 40 41end 42
views/index.html.slim
slim
1= render partial: "users/user_profile", local: { user: @user } 2. 3. 4. 5 6
views/_user_profile.html.slim
*ここにエラーがでます。ここのコードがおかしいようです。
slim
1#user_profile 2 .user_image 3 = image_tag @user.avatar if @user.avatar.attached? 4 5 .user_name 6 p= @current_user.name+"さん" 7
#試したこと
views/_user_profile.html.slim
ここのコードを下記のように編集すればエラーは消えましたが、画像は出力されませんでした。
slim
1#user_profile 2 .user_image 3 4 = image_tag @user.avatar if @user.avatar.attached? 5 #このコードを 6 7==> = image_tag @current_user.avatar if @current_user.avatar.attached? 8 #こう変更 9 10 .user_name 11 p= @current_user.name+"さん" 12
#お願いしたいこと
なぜエラーがおこっているのか、解決のアドバイスをいただきたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。