0
0

More than 1 year has passed since last update.

deviseを使用時に名前を表示できない時の解決方法

Posted at

困っていたこと

以下のコントローラ、ビューの記述でサインイン後ユーザのnameが表示されると思っていましたが表示されません。
rails cなどで調べるとそもそも新規登録時に名前が保存できていませんでした。

*users_controller.rb

def show
    @user = User.find(params[:id])
  
  end

*/users/show.html.erb

<h1>Users#show</h1>

<%= @user.name %>

userテーブルにもnameの記述をしているしどこが原因を調べていました。

create_table "users", force: :cascade do |t|
    t.string "email", default: "", null: false
    t.string "encrypted_password", default: "", null: false
    t.string "reset_password_token"
    t.datetime "reset_password_sent_at"
    t.datetime "remember_created_at"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "name"
    t.text "profile"
    t.boolean "is_deleted", default: false
    t.index ["email"], name: "index_users_on_email", unique: true
    t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
  end

解決方法

deviseでは新規登録時にはメールアドレス、パスワードしか保存できない状態になっており必要な情報はapplication_controller.rbに追加してあげなくてはいけないのでした。
よって以下の記述になりました。
*/application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :configure_permitted_parameters, if: :devise_controller?

  def after_sign_in_path_for(resource)
    user_path(current_user.id)
  end

  def after_sign_out_path_for(resource)
    root_path
  end

  def after_sign_up_path_for(resource)
    user_path(current_user.id)
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end
end

before_action :configure_permitted_parameters, if: :devise_controller?

こちら↑の記述でdeviseの機能が行われる前にconfigure_permitted_parametersメソッドが実行されるという意味。

protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  end

こちら↑の記述でユーザー登録に際にnameを保存できるということでした。

この内容は過去に一回勉強している内容で実践に生かされていないことが身に染みました。
復習も兼ねて理解できたのでよかったです。
間違っている内容などございましたらご教授お願いします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0