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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

742閲覧

NoMethodErrorがでる。

rr2

総合スコア3

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/05/06 02:20

前提・実現したいこと

Ruby on Railsで体重管理アプリを作成しています。

recordコントローラーのcreateアクションでNoMethodErrorがでてしまいます。

体重をフォームから打ち込んで、Sendを押すとエラーがでるので
解決したいです。

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

NoMethodError in RecordsController#create undefined method `records' for nil:NilClass

該当のソースコード

Ruby

1 2class RecordsController < ApplicationController 3 # before_action :authenticate_user![:index] 4 before_action :correct_user, only: [:destroy] 5 6 def index 7 @user = current_user 8 end 9 10 def new 11 @record = Record.new 12 @user = current_user 13 end 14 15 def create 16 @record = @user.records.build(record_params) 17 if @record.save 18 flash[:notice] = '体温を投稿しました。' 19 else 20 @records = current_user.records.includes(:user) 21 flash[:alert] = '体温の投稿に失敗しました。' 22 end 23 redirect_to root_path 24 end 25 26 private 27 28 def record_params 29 params.require(:record).permit(:value, :date).merge(user_id: current_user.id) 30 end 31 def correct_user 32 @record = current_user.records.find_by(id: params[:id]) 33 unless @record 34 redirect_to root_url 35 end 36 end 37end 38

createアクションの一行目のrecordsでエラーがでています。

試したこと

current_userがnilかと思ったのですが、
index、newでは正常に作動しています。

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

Ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root to: "records#index" 4 resources :records, only: [:index, :new, :create] 5 resources :users, only: [:edit, :update] 6end

他に必要なコードがあれば、教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

current_userがnilかと思ったのですが、

index、newでは正常に作動しています。

createの中の@userは、何の操作も行っていませんのでnilです。Railsのコントローラーは、1回のリクエストごとに別なインスタンスが生成されますので、インスタンス変数は毎回ゼロからになります。

投稿2020/05/06 02:23

maisumakun

総合スコア145184

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

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

rr2

2020/05/06 02:29 編集

ありがとうございます。 こちらをcurrent_userに変えても 同じ結果になるのですが、他に書き方はありますか? 同じ結果ではなく、違うエラーがでました。 ``` ActiveModel::UnknownAttributeError in RecordsController#create unknown attribute 'date' for Record. ``` なにかわかりますでしょうか?
maisumakun

2020/05/06 02:29

createの1行目を「@record = current_user.records.build(record_params)」に書き直した、ということですか? (正確なコードがわからないと、「書き換え方が悪い」場合がわかりません)
rr2

2020/05/06 02:30

はい。そのように書き換えました。 @record = current_user.records.build(record_params)
maisumakun

2020/05/06 02:33 編集

> unknown attribute 'date' for Record. エラーメッセージのとおりです。「date」という列がない以上、セットできません。
rr2

2020/05/06 02:37

ご回答ありがとうございました。 これは別のDBの問題が発生していると判断しました。 DBにdataカラムがなかったので追加してみます。 その後エラーがでましたら、また質問する、、、といった形にしようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問