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

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

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

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

Ruby

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

AWS(Amazon Web Services)

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

Q&A

解決済

2回答

2566閲覧

usersテーブルにnameカラムはあるはずなのに、undefined method `id' for nil:NilClassと出てしまいます

sn.jr

総合スコア53

Cloud9

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

Ruby

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Ruby on Rails

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

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2019/10/18 12:42

初めまして、Ruby on Rails を学び始めたばかりものです。
現在Progateを参考にしながらcloud9でチームメンバーを登録するWebサービスを作っています。

プロフィールを編集する機能(update)を実装中に以下のエラーメッセージが発生しました。

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

NoMethodError in UsersController#update

undefined method `id' for nil:NilClass

エラーメッセージ

該当のソースコード

if params[:image]
@user.image_name = "#{@user.id}.jpg"
image = params[:image]
File.binwrite("/public/user_images/#{@user.image_name}", image.read)
end

Rials

1ソースコード

試したこと

tableに指定したカラムがあるかどうかをrails dbconsole → .table→ .schema usersで確認したところ 下記のようなメッセージが出ました。まずこれはカラムがあるという認識でよろしいのでしょうか?
"users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "part" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "profile" varchar, "old" integer, "image_name" varchar);

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

ruby

1if params[:image] 2 @user.image_name = "#{@user.id}.jpg" #<- エラーの箇所 3 image = params[:image] 4 File.binwrite("/public/user_images/#{@user.image_name}", image.read) 5end

undefined method id' for nil:NilClassのエラーはnilからidの値を取得しようとしているため生じています。
該当のコードは#{@user.id}です。
User_controller.rbに下記のコードが必要です。

ruby

1class UserController < ApplicationController 2 before_action :set_user #<- この行 3. 4. 5. 6 private 7 # Use callbacks to share common setup or constraints between actions. 8 def set_user #<- このメソッド 9 @user = User.find(params[:id]) 10 end 11end

通常はコントローラーを作ればテンプレートで作成される部分ですが、何かの際にうっかり消してしまったのではないでしょうか

投稿2019/10/18 13:12

NCC1701

総合スコア1680

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

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

sn.jr

2019/10/19 01:13 編集

ご回答ありがとうございます! 早速試してみたのですが、Couldn't find User with 'id'=:idというエラーが出てしまいました。def set_userを@user = User.find_by(id: params[:id])にしたところエラーは出なくなったのですが、自分がやろうとしていた画像のアップロードはできていませんでした。
sn.jr

2019/10/19 01:49

ありがとうございます!参考にさせていただきます!
guest

0

@user を定義していないからです。

投稿2019/10/18 13:10

winterboum

総合スコア23284

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問