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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1173閲覧

Ruby on Rails newメソッドのSQLクエリ

S.N.

総合スコア21

Ruby

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/09/20 02:21

前提

  • Ruby on Railsにてアプリケーション開発を行っています。
  • form_tagを使って投稿フォームを作成しているのですが、どこに問題がありそうか、掴めず困っています

困っていること

下記がエラーの内容です

NoMethodError in UserController#create undefined method `[]' for nil:NilClass

また、ソースコードは以下の通りです

Ruby

1# コントローラ 2 def new 3 @user = User.new 4 end 5 6 def create 7 puts params 8 @user = User.new( 9 user_name: params[:user_name], 10 email: params[:email], 11 password: params[:password] 12 ) 13 if @user.save 14 session[:user_id] = @user.id 15 redirect_to("/home/top") 16 end 17 end 18 19# ビュー 20<div class = "user-registration-wrapper"> 21 <%= form_tag("/user") do %> 22 <div class = "container"> 23 <h2>ユーザ情報を入力してください。</h2> 24 <div class = "new-user-name"> 25 <input name = "user_name" type="text" placeholder="ユーザ名" class="form-control flat"> 26 </div> 27 <div class = "new-user-email"> 28 <h2></h2> 29 <input name = "email" type="text" placeholder="メールアドレス" class="form-control flat"> 30 </div> 31 <div class = "new-user-password"> 32 <h2></h2> 33 <input name = "password" type="password" placeholder="パスワード" class="form-control flat"> 34 </div> 35 </div> 36 <div class = "registration-submit"> 37 <input type="submit" value = "登録する" class= "form-control flat"> 38 </div> 39 <% end %> 40 </div> 41 42# 入力時のログ 43Started POST "/user" for ::1 at 2017-09-20 11:11:29 +0900 44Processing by UserController#create as HTML 45 Parameters: {"utf8"=>"✓", "authenticity_token"=>"eJhO8PxRJfdQVYs+Ve+5OiIHMfM5Hd7C80sXWxm9Yd 46ZZs7FiR26Q/6CxUdkEkH4cxc1RPU0otSjSlZvoQGkttA==", "user_name"=>"hoge", "email"=>"hoge@foo.co.jp", "password"=>"[FILTERED]"} 47 User Load (0.0ms) SELECT "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT 1 48 User Load (1.0ms) SELECT "users".* FROM "users" WHERE "users"."user_name" = ? AND "users". 49"email" = ? LIMIT 1 [["user_name", "hoge"], ["email", "hoge@foo.co.jp"]] 50{"utf8"=>"✓", "authenticity_token"=>"eJhO8PxRJfdQVYs+Ve+5OiIHMfM5Hd7C80sXWxm9YdZZs7FiR26Q/6Cx 51UdkEkH4cxc1RPU0otSjSlZvoQGkttA==", "user_name"=>"hoge", "email"=>"hoge@foo.co.jp", "password"=>"hogehoge", "controller"=>"user", "action"=>"create"} 52Completed 500 Internal Server Error in 12ms (ActiveRecord: 1.0ms) 53 54NoMethodError (undefined method `[]' for nil:NilClass): 55 app/controllers/user_controller.rb:22:in `create'

ログを見る感じでは値は入ってるけどその渡し先が間違っているんでしょうか。個人的には「SELECT」となっているのが少し気になります。
newメソッドだとCREATEとかINSERTとかになりかなと考えていますが…

問題点、解決策等ご教示いただけますと幸いです。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージ

NoMethodError in UserController#create undefined method `[]' for nil:NilClass

から、変数[] で、変数が存在しない(nil)の状態でアクセスをしています。
可能性として考えられるのは params と session ですね。どちらか、あるいは両方が nil の状態で呼ばれていると思われるので、create の中できちんと渡されているかどうかチェックしましょう。

投稿2017/09/20 08:57

tacsheaven

総合スコア13703

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

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

S.N.

2017/09/21 00:20

ご回答ありがとうございました。 ネストしない形でストロングパラメータを利用して無事解決できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問