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

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

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

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

Ruby

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

Ruby on Rails

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

Q&A

解決済

1回答

3224閲覧

RubyonRails ユーザー新規登録の際にName can't be blankがでて登録ができません…

TOMSOYA

総合スコア23

Ruby on Rails 5

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

Ruby

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

Ruby on Rails

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

1グッド

1クリップ

投稿2019/04/23 12:36

編集2019/04/23 13:40

前提・実現したいこと

プログラミング練習としてTwitterのようなサービスを作っているのですが、ユーザーの新規登録ができないで悩んでいます。

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

名前、メールアドレス、パスワードを入力して登録しようとすると全て入力しているにも関わらずName can't be blank、Email can't be blank、Password can't be blankがでて登録が完了しません。

該当のソースコード

#new.html.erb <div class="main users-new"> <div class="container"> <div class="form-heading">新規ユーザー登録</div> <div class="form users-form"> <div class="form-body"> <% @user.errors.full_messages.each do |message| %> <div class="form-error"> <%= message %> </div> <% end %> <%= form_with model: @user, local: true do |f| %> <div class="form-group"> <%= f.label :name, '名前' %> <%= f.text_field :name, class: 'form-control' %> </div> <div class="form-group"> <%= f.label :email, 'メールアドレス' %> <%= f.email_field :email, class: 'form-control' %> </div> <div class="form-group"> <%= f.label :password, 'パスワード' %> <%= f.password_field :password, class: 'form-control' %> </div> <div class="form-group"> <%= f.label :password_confirmation, 'パスワード(もう1度ご入力ください)' %> <%= f.password_field :password_confirmation, class: 'form-control' %> </div> <%= f.submit '登録する', class: 'btn btn-primary btn-block' %> <% end %> </div> </div> </div> </div>
#users_controller.rb def new @user = User.new end def create @user = User.new(user_params) if @user.save session[:user_id] = @user.id flash[:notice] = "ユーザー登録が完了しました" redirect_to("/users/#{@user.id}") else render("users/new") end end private def user_params params.require(:user).permit(:name, :email, :password,:password_confirmation) end
Rails.application.routes.draw do post "likes/:post_id/create" => "likes#create" post "likes/:post_id/destroy" => "likes#destroy" get "login" => "users#login_form" post "login" => "users#login" post "logout" => "users#logout" post "users/create" => "users#create" get "signup" => "users#new" get 'users/index' get "users/:id" => "users#show" get "users/:id/edit" => "users#edit" post "users/:id/update" => "users#update" get "users/:id/likes" => "users#likes" get 'posts/index' => "posts#index" get "posts/new" => "posts#new" get "posts/:id" => "posts#show" post "posts/create" => "posts#create" get "posts/:id/edit" => "posts#edit" post "posts/:id/update" => "posts#update" post "posts/:id/destroy" => "posts#destroy" get '/' => "home#top" get "about" => "home#about" resources :users, only: [:index, :show, :create, :edit, :update] resources :posts, only: [:index, :show, :create] do resources :comments, only: [:create] end end
#user.rb class User < ApplicationRecord has_secure_password mount_uploader :image, ImageUploader validates :name,{presence: true} validates :email,{presence: true, uniqueness: true} validates :password, presence: true, length: { minimum: 6 }, allow_nil: true validates :profile, length: { maximum: 160 } has_many :posts, dependent: :destroy has_many :comments, dependent: :destroy def posts return Post.where(user_id: self.id) end end
#post.rb class Post < ApplicationRecord mount_uploader :image, ImageUploader validates :content,{presence: true, length:{maximum:140}} validates :user_id,{presence: true} belongs_to :user has_many :comments, dependent: :destroy def user return User.find_by(id: self.user_id) end end

試したこと

試行錯誤したのですが上手くいきませんでした…
回答いただけると幸いです。

退会済みユーザー👍を押しています

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

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

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

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

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

ninginnn

2019/04/23 13:10

パッとみた限り、間違いはない気がします。 modelはどのようになっていますでしょうか?
TOMSOYA

2019/04/23 13:41

回答ありがとうございます! modelのコード追加しました!
guest

回答1

0

ベストアンサー

まずルーティングを整理するところから始めたほうがいいと思いました。

usersのルーティングがresourcesと重複している可能性があります(resourcesにnewがなさそうですが)

routes

1resources users, only: [:index, :new, :show, :create, :edit, :update] do 2 member do 3 get likes 4 end 5end

上記(:newを追加してます)により

get 'users/index' get "users/:id" => "users#show" get "users/:id/edit" => "users#edit" post "users/:id/update" => "users#update" get "users/:id/likes" => "users#likes"

が不要になると思います。

冗長なので only: [:index, :new, :show, :create, :edit, :update] ではなく except: :destroy でいいかもしれません。

本題ですが、 createの最初の行でデバッグをかけてuser_paramsの中身を確認されましたでしょうか??
よければその内容を書いていただけると、より解決策が早く見つけられますし、こちらからもアドバイスをしやすいです。

デバッグは binding.pry を書けばいけます。
gemが入ってなければ、 pry-railsをdevelopmentへ追記してbundle installすれば入ります。

投稿2019/04/23 13:38

mot93

総合スコア99

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

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

TOMSOYA

2019/04/23 14:10

回答ありがとうございます! ルーティングの整理は心掛けるようにします。ご指摘ありがとうございます! デバックはかけていませんでした。そもそもかけ方がわからず回答を頂いて調べて行おうと思ったのですが@user = User.new(user_params)の直後にbinding.pryを書いても実行されません。 ターミナル側でも操作は必要でしょうか…?
mot93

2019/04/23 14:22

大丈夫ですよ! デバッグ用のgemは入ってますか?? ``` group :development, :test do # (おまけ)エラー画面でデバッグできる gem 'better_errors' # デバッグ用gem gem 'pry-byebug' gem 'pry-doc' gem 'pry-rails' end ``` だいたいこの4つをいれてターミナル上で `bundle install` すれば入るはずです。 ターミナル上でrailsサーバーは起動している状態で、def createの真下に `binding.pry` を入れましょう。 その後に、new画面を開き、フォームを入力後、「登録する」ボタンを押してみてください。 すると、先ほどrailsサーバーを起動している画面を開くと、 `binding.pry` の位置で止まっているのがわかるかと思います。 ここまで試してみて、 `user_params` の中身を確認してみてください。 ちょっと長いのでわかりにくかったらすみません
mot93

2019/04/23 14:30

上記で上手くいかなかった場合、一度サーバー起動し直す & createの中身を全て一旦コメントアウトした上でbinding.pryのみを記載し、user_paramsを確認してみてください。 paramsの中身も確認してみるといいかもしれません。
TOMSOYA

2019/04/23 15:01

すごく丁寧にありがとうございます!本当に助かります!! 手順通り実行した結果下記のようなメッセージがでてきました。 Parameters: {"utf8"=>"✓", "authenticity_token"=>"7dIV8ZMg5ik7QY3y3jqW83EPApgETTj8nXtYxfENRMWa43iRgBVv5yDZ4tf02I3FVDyuNkUBRXLAZiQvtEKDMg==", "user"=>{"name"=>"さいとう", "email"=>"kakaka@com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"登録する"} User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT ? [["LIMIT", 1]] ↳ app/controllers/application_controller.rb:5 (0.1ms) begin transaction ↳ app/controllers/users_controller.rb:27 User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE "users"."email" IS NULL LIMIT ? [["LIMIT", 1]] ↳ app/controllers/users_controller.rb:27 (0.2ms) rollback transaction ↳ app/controllers/users_controller.rb:27 Rendering users/new.html.erb within layouts/application Rendered users/new.html.erb within layouts/application (2.9ms) Completed 200 OK in 43ms (Views: 26.6ms | ActiveRecord: 0.7ms) これっておそらく上手く行えていないってことですよね…?
mot93

2019/04/23 15:59 編集

そうですね。 というか、よく見たらuserモデルでprofileのバリデーションかけてますね 登録の際にその情報もいれてもらってよいですか??
TOMSOYA

2019/04/23 23:32

朝起きて再度試してみたところ登録できました! しかし特に何を変えたというわけではないのですが上手く行ったので原因が何だったのかがわかりません。 テキストエディタの不調などコードに問題があったわけでなはく別のところに問題があった可能性があるってことですかね? ただなんとか解決はできたの丁寧な回答本当にありがとうございました!
mot93

2019/04/24 09:16

もしかしたら何か上手く行ってなかったのかもしれないですねー とりあえず、解決できてよかったです
TOMSOYA

2019/04/24 11:35

とりあえず前に進んでいこうと思います! ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問