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

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

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

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

Q&A

解決済

1回答

824閲覧

[Active Storage][Rails]アップロードした画像を表示したい

uk_63

総合スコア29

Ruby on Rails 5

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

Active Record

Active Recordは、一つのオブジェクトに対しドメインのロジックとストレージの抽象性を結合するデザインパターンです。

0グッド

0クリップ

投稿2018/12/14 13:01

#開発環境
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

#お願いしたいこと
なぜエラーがおこっているのか、解決のアドバイスをいただきたいです。

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

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

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

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

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

guest

回答1

0

自己解決

画像を送信するフォームが誤っていました。

投稿2018/12/14 15:15

uk_63

総合スコア29

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問