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

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 389

TOMSOYA

score 17

前提・実現したいこと

プログラミング練習として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

試したこと

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ninginnn

    2019/04/23 22:10

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

    キャンセル

  • TOMSOYA

    2019/04/23 22:41

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

    キャンセル

回答 1

checkベストアンサー

+1

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

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

resources users, only: [:index, :new, :show, :create, :edit, :update] do
  member do
    get likes
  end
end

上記(: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/24 08:32

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

    キャンセル

  • 2019/04/24 18:16

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

    キャンセル

  • 2019/04/24 20:35

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

    キャンセル

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

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる