rails root画面がうまく設定できない
Q&A
root to: "tasks#index"
としているのにトップページがログイン画面になってしまうんですが以下に必要なファイルコードを書くので一緒に解決していただけるとありがたいです。
.やったことtasks_controller内のbefore_action :require_user_logged_in
をなくしたらルーティング通りにトップページが表示されるのですが、ログイン機能をつけたいのでなくてはいけません。
config\roots
Rails.application.routes.draw do
  root to: "tasks#index"
  get 'login', to: 'sessions#new'
  post 'login', to: 'sessions#create'
  delete 'logout', to: 'sessions#destroy'
  get 'signup', to: 'users#new'
  resources :tasks
  resources :users, only: [:index, :show, :new, :create]
end
taks_controller
class TasksController < ApplicationController
    before_action :require_user_logged_in
    before_action :correct_user, only: [:destroy]
    def index
       @tasks = Task.all#.page(params[:page]).per(3)
    if logged_in?
      @task = current_user.tasks.build  # form_with 用
      @tasks = current_user.tasks.order(id: :desc).page(params[:page])
    end
    end
    def show
        @task = Task.find(params[:id])
    end
    def new
       @task = Task.new
    end
 .......
.......
sessins_controller
class SessionsController < ApplicationController
  def new
  end
  def create
    email = params[:session][:email].downcase
    password = params[:session][:password]
    if login(email, password)
      flash[:success] = 'ログインに成功しました。'
      redirect_to root_url
    else
      flash.now[:danger] = 'ログインに失敗しました。'
      render :new
    end
  end
  def destroy
     session[:user_id] = nil
    flash[:success] = 'ログアウトしました。'
    redirect_to root_url
  end
  private
  def login(email, password)
    @user = User.find_by(email: email)
    if @user && @user.authenticate(password)
      # ログイン成功
      session[:user_id] = @user.id
      return true
    else
      # ログイン失敗
      return false
    end
  end
end
sessions\new.html.erb
<h3>sessions#new</h3>
<div class="text-center">
  <h1>Log in</h1>
</div>
<div class="row">
  <div class="col-sm-6 offset-sm-3">
    <%= form_with(url: login_path, scope: :session, local: true) do |f| %>
      <div class="form-group">
        <%= f.label :email, 'Email' %>
        <%= f.email_field :email, class: 'form-control' %>
      </div>
      <div class="form-group">
        <%= f.label :password, 'Password' %>
        <%= f.password_field :password, class: 'form-control' %>
      </div>
      <%= f.submit 'Log in', class: 'btn btn-primary btn-block' %>
    <% end %>
    <p>New user? <%= link_to 'Sign up now!', signup_path %></p>
  </div>
</div>
よろしくお願いいたします。
0 likes

