困っていたこと
以下のコントローラ、ビューの記述でサインイン後ユーザの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を保存できるということでした。
この内容は過去に一回勉強している内容で実践に生かされていないことが身に染みました。
復習も兼ねて理解できたのでよかったです。
間違っている内容などございましたらご教授お願いします。