rails 独学して軽くにちゃんまとめつくる

読者です 読者をやめる 読者になる 読者になる

NoMethodError in UsersController#create
undefined method `user' for

 

 

f:id:mooooooooooriiiiii:20170201131720p:plain

 

こんなエラーがでてきた。 つかってるのは @user だから user なんて使ってないから知らんわ、と思っていた。よくわからんからエラーの箇所をコメントアウトしてtrue にしたらエラーがでなかった。よってここがエラーのポイント。

 

間違った箇所は モデルのバリデーションだった。

 

 create でエラーがでたときはキチンとモデルも見直さなきゃならんことがわかった。ビューとコントローラーしか見てなくて、モデルのことなんか全然気にしてなかった。

 

 def create
    @user = User.new(user_params)
    if true  #@user.save エラーの箇所をコメントアウト
      flash[:success] = "新規登録が完了しました"
      redirect_to root_path
    else
      render :new
    end
  end

 

 

 

次に false にしてみる。

 

 

f:id:mooooooooooriiiiii:20170201132901p:plain

 

 

あ、だめじゃん。バリデーションがかかってない。空のまま送信したんだからエラーが発生しなきゃだめなのに。ということでモデルを見に行ったら、やってしまってた。

 

class User < ApplicationRecord
  before_save {self.email = email.downcase}
  validates :user,  presence: true, length: {maximum: 50}

 

user なんて属性は作成していない。 :name のつもりが :user とやっていた。バカなミスだ。