No route matches [POST] "/session/index"とエラーが出ました。
Log in 画面で自分のメールとパスワードを打ったら、こう出てしまいました。
今までは、ブラウザのエラーではないのですが、
1 error prohibited this user from being saved: Id can't be blank
とLog in 画面でボタンを押した時にエラーが出て、それで使用を変更したらこうなりました。
deviseとgem 'bcrypt', '~> 3.1.7'を使っています、またscaffoldも使っています。
前の仕様のエラーでは、
users.ymlにユーザーデータが何も記載されていないのがエラーの原因だと考えました。
なので
id、 name、emailodyssey.yh0204@gmail.com、 encrypted_passwordを記入しようと思ったのですが、encrypted_passwordは暗号化されたものなので、自分で作り方がわかりませんでした。
今回のエラーがencrypted_passwordのものなのか、単にルート指定のエラーなのかわかりません。どう直したら良いでしょうか?
session_controller.rb(Log in の部分)には
class SessionController < ApplicationController skip_before_action :user_logged_in? def index @user = User.new end def create @user = User.find_by(email: user_params[:email]) if @user && @user.authenticate(user_params[:password]) reset_user_session session[:user] = @user.id redirect_to params[:referer].present? ? params[:referer] : users_path else @user = User.new flash.now[:referer] = params[:referer] flash.now[:error] = true render :index end end def delete reset_user_session redirect_to session_index_url end private def user_params params.require(:user).permit(:email, :password) end end
と書き、
users_controllerr.rbには
class UsersController < ApplicationController before_action :set_user, only: [:show, :edit, :update, :destroy] # GET /users # GET /users.json def index @users = User.all end # GET /users/1 # GET /users/1.json def show end # GET /users/new def new @user = User.new end # GET /users/1/edit def edit end # POST /users # POST /users.json def create @user = User.new(user_params) respond_to do |format| if @user.save format.html { redirect_to @user, notice: 'User was successfully created.' } format.json { render :show, status: :created, location: @user } else format.html { render :new } format.json { render json: @user.errors, status: :unprocessable_entity } end end end # PATCH/PUT /users/1 # PATCH/PUT /users/1.json def update respond_to do |format| if @user.update(user_params) format.html { redirect_to @user, notice: 'User was successfully updated.' } format.json { render :show, status: :ok, location: @user } else format.html { render :edit } format.json { render json: @user.errors, status: :unprocessable_entity } end end end # DELETE /users/1 # DELETE /users/1.json def destroy @user.destroy respond_to do |format| format.html { redirect_to users_url, notice: 'User was successfully destroyed.' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_user @user = User.find(params[:id]) end # Never trust parameters from the scary internet, only allow the white list through. def user_params params.require(:user).permit(:name, :email) end end
とかき、
routes.rbには
Rails.application.routes.draw do get 'session/index' devise_for :users resources :users resources :session, path: "login", only: [:index, :create] do collection do delete '/', to: "session#delete" end end end
users.ymlには
user_1: id: 1 name: "myname" email: "自分のアドレス" encrypted_password:
と書きました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。