現在railsを使い、ツイッターのようなsnsサイトを練習で作成しています。
ユーザー登録時とログイン時にsession[:user_id]を用いてユーザー情報を保持させたいのですが、うまくいきません。
ユーザーを登録した後にログインをする際は、session[:user_id]に@user.idがうまく入り、ログイン状態が保持されるのですがユーザーの新規登録をした際にはsession[:user_id]に@user.idの値が代入されません。また、ユーザー登録時、ログイン時共にif文を使い成功したらflashでメッセージを出しつつ違うページに遷移するようにしているのですが、ユーザー登録時のみflashが表示されません。(どちらの場合も遷移は問題なく行われます。)
ユーザー登録時には if @user.save以下のflashとsession[:user_id]は何も変わらず、redirectのみが動きます。
ログイン時にはif @user以下のflash,session[:user_id],redirectが全て問題なく動きます。
また、ログインをした後に(session[:user_id]に値が入った状態で)もう一度ユーザー登録で新しいユーザーを登録した場合はflashもsession[:user_id]もredirectも全て問題なく動きます。最初にユーザー登録をする際にflashとsession[:user_id]がしっかりと動くようにしたいのですが、どこが間違っているのか分りません。どうすれば良いのでしょうか?
以下が新規登録の際のコードです
def new
@user = User.new
end
def create @user = User.new(name: params[:name], email: params[:email], password: params[:password], image_name: "default.jpg" ) if @user.save session[:user_id] = @user.id flash[:notice] = "ユーザー登録が完了しました" redirect_to("/") else render("users/new") end end
以下がログインの際のコードです
def login_form
end
def login @user = User.find_by(email: params[:email],password: params[:password]) if @user flash[:notice] = "ログインしました" session[:user_id] = @user.id redirect_to("/") else @error_message = "メールアドレスまたはパスワードが間違っています" @email = params[:email] @password = params[:password] render("users/login_form") end end
あなたの回答
tips
プレビュー