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