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

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

ただいまの
回答率

87.36%

【Rails】パラメータがコントローラーに渡っているのに新規登録が成功しない

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 714

score 19

前提・実現したいこと

お世話になっております。今回もよろしくおねがいします。
railsのユーザー新規登録でパラメーターがコントローラー側に渡っているのに、ユーザーの作成に失敗してしまいます。
コンソール上では保存が可能なのに、なぜ失敗してしまうのかわからず、困っています。
お知恵をお貸しいただければ幸いです。

binding.pryのデータ

From: /home/ec2-user/environment/new_app2/app/controllers/users_controller.rb @ line 15 UsersController#create:

    11: def create
    12:   @user=User.new(user_params)
    13:   if @user.save
    14:      binding.pry
 => 15:      redirect_to user_path(@user)
    16:   else
    17:     
    18:     render new_user_path
    19:   end
    20: end

[1] pry(#<UsersController>)> @user
=> #<User id: 41, email: "testuser22@gmail.com", created_at: "2019-08-15 12:22:27", updated_at: "2019-08-15 12:22:27", admin_flg: nil, refresh_token: nil, access_token: nil, userimage: nil, username: "testuser">
[2] pry(#<UsersController>)> @user.save
   (0.1ms)  begin transaction
   (0.0ms)  commit transaction
=> true

app/views/users/new.html.hamlからsubmitしたときのターミナルログ

Started POST "/users" for 36.3.213.27 at 2019-08-15 12:18:41 +0000
Cannot render console from 36.3.213.27! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by UsersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"hnrNfvrGA6GCx9HqTyaPzoBW2Kvibj83lU8LSfiRmG71Jr6AwvmjUe/
1nK2lmCBRE8teKZeuCVhKdZ0MagsjLA==", "user"=>{"username"=>"testuser", "email"=>"testuser@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"登録する"}
   (0.1ms)  begin transaction
  User Create (0.5ms)  INSERT INTO "users" ("email", "encrypted_password", "created_at", "updated_at", "username") VALUES (?, ?, ?, ?, ?)  [["email", "testuser@gmail.com"], ["encrypted_password", "$2a$11$Z9AD6ras0Qra6q65mnR9EOsIpdzmfDUD4/hQgywLjQrymhN61lrX6"], ["created_at", "2019-08-15 12:18:41.330942"], ["updated_at", "2019-08-15 12:18:41.330942"], ["username", "testuser"]]
   (5.1ms)  commit transaction
Redirected to https://9ba3b08da6334d189d339fb602aa9537.vfs.cloud9.us-east-2.amazonaws.com/users/40
Completed 302 Found in 165ms (ActiveRecord: 5.7ms)


Started GET "/users/40" for 36.3.213.27 at 2019-08-15 12:18:41 +0000
Cannot render console from 36.3.213.27! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by UsersController#show as HTML
  Parameters: {"id"=>"40"}
Redirected to https://9ba3b08da6334d189d339fb602aa9537.vfs.cloud9.us-east-2.amazonaws.com/users/new
Filter chain halted as :check_user_login? rendered or redirected
Completed 302 Found in 2ms (ActiveRecord: 0.0ms)


Started GET "/users/new" for 36.3.213.27 at 2019-08-15 12:18:41 +0000
Cannot render console from 36.3.213.27! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by UsersController#new as HTML
  Rendering users/new.html.haml within layouts/application
  Rendered users/new.html.haml within layouts/application (17.0ms)
  Rendered layouts/_head.html.haml (65.3ms)
  Rendered layouts/_header.html.haml (9.8ms)
  Rendered layouts/_flash.html.haml (1.5ms)
  Rendered layouts/_footer.html.haml (1.5ms)
Completed 200 OK in 107ms (Views: 105.5ms | ActiveRecord: 0.0ms)

該当のソースコード

app/views/users/new.html.haml

%h2.page_title ユーザー登録ページ
= simple_form_for(@user,html: {multipart: true}) do |f| 
  .form-inputs.form_group
    = f.input :username,                       
      required: true,                       
      autofocus: true,                      
      input_html: { autocomplete: "username",class:"form-control" } 
    = f.input :email,                       
      required: true,                       
      autofocus: true,                      
      input_html: { autocomplete: "email",class:"form-control"} 
    = f.input :password,                                                                    
      required: true,                                                                       
      hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length), 
      input_html: { autocomplete: "new-password",class:"form-control" }                                          
    = f.input :password_confirmation,              
      required: true,                              
      input_html: { autocomplete: "new-password",class:"form-control mb-3" }
    = f.input :user_image, as: :file
    = f.button :submit, "登録する",
    input_html: { class:" btn btn-primary " } 
  = link_to 'Signin with Google',user_google_omniauth_authorize_path


app/controller/users_controllers

# frozen_string_literal: true
class UsersController < ApplicationController

  before_action :check_user_login?, only: [:show]

  def new
   @user=User.new
  end


  def create
    @user=User.new(user_params)
    binding.pry
    if @user.save
       redirect_to user_path(@user)
    else
      render new_user_path
    end
  end


  def edit
   user_find_by_id
  end


  def update
    @user = User.find_by(user_params)
      if @user.update(user_params)
      redirect_to user_path(id: current_user.id)
      else
      render edit_user_path
      end
  end


  def destroy
    user_find_by_id
    @user.destroy
  end

  def show
    user_find_by_id
    @tours = Tour.where(user_id: @user.id)
  end

  def followings
    user_find_by_id
    @users = @user.followings.page(params[:page])
    render 'follow'
  end

  def followers
    user_find_by_id
    @users = @user.followers.page(params[:page])
    render 'follow'
  end

  def favorite
    @tours = current_user.favtours.page(params[:page])
  end

  private

  def user_find_by_id
    @user = User.find_by(id: params[:id])
  end
  def user_params
   params.require(:user).permit(:username,:email, :password, :password_confirmation, :user_image)
  end
end


app/model/user.rb

# frozen_string_literal: true

class User < ApplicationRecord
  has_many :tours, dependent: :destroy
  has_many :comments, dependent: :destroy
  has_many :likes, dependent: :destroy
  has_many :liked_tours, through: :likes, source: :tour
  has_many :favorites
  has_many :favtours, through: :favorites, source: :tour
  has_many :relationships
  has_many :followings, through: :relationships, source: :follow
  has_many :reverse_of_relationships, class_name: 'Relationship', foreign_key: 'follow_id'
  has_many :followers, through: :reverse_of_relationships, source: :user

  devise :database_authenticatable, 
         :recoverable, :rememberable, 
        # :validatable, :registerable,
         :omniauthable

  mount_uploader :userimage, UserimageUploader
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • winterboum

    2019/08/15 22:23

    Started POST のlogをみると無事登録できて、ID=40のUserができていると思うのですが、「できない」と判断したのは何を元にしてますか?

    キャンセル

  • k_yusuke

    2019/08/15 22:33

    winterboum様お久しぶりです
    submitした際にusers/new.html.hamlにrenderされたことから、users_controllerのcreateアクションにおいてelse以下が実行されたと判断しました!

    キャンセル

回答 2

check解決した方法

0

redirect先を変更したところうまくいきました!
ありがとうございました!!

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

保存には成功し

Filter chain halted as :check_user_login? rendered or redirected

でリダイレクトしているだけのような気がします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/08/15 22:35

    asm様返信有難うございます
    なるほど!保存は成功しているんですね!renderされてしまったので、失敗したと勘違いしていたようです

    キャンセル

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

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

同じタグがついた質問を見る