質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

866閲覧

ログイン認証と一対多をタスク管理アプリに追加する

SUGAI-AYAKA

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/15 00:50

前提・実現したいこと

tasklistにログイン認証機能を付けてログインしているユーザーが自身の作成したタスクのみにアクセスできるようにする。ユーザー登録に失敗した際なぜ登録できなかったかわかるようにバリデーションエラーメッセージを表示してログインユーザーが登録したタスクのみを操作できるようタスクにユーザーの紐付けをする。
rootのルーティング(/)はtasks/indexとする。ユーザーログイン後はroot(/)へ遷移しログインユーザーが登録したタスクを一覧表示してください。

発生している問題・エラーメッセージ

エラーメッセージ https://.com/33b66ab99773cd645182203127fab298 uninitialized constant ApplicationController::SessionsHelpe Rails.root: /home/ec2-user/environment/tasklist Application Trace | Framework Trace | Full Trace app/controllers/application_controller.rb:3:in `<class:ApplicationController>' app/controllers/application_controller.rb:1:in `<top (required)>' app/controllers/tasks_controller.rb:1:in `<top (required)>' ### 該当のソースコード route.rb 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 :users, only: [:index, :show, :new, :create] resources :tasks end https://gyazo.com/79cb115186c1aac0f5ca96ced6b660cf *application_controller.rb class ApplicationController < ActionController::Base before_action :login_required include SessionsHelpe private def require_user_logged_in unless logged_in? redirect_to login_url end end end https://gyazo.com/74ca68ba25025610853a055a4d5f3201 *sessions_controller* https://gyazo.com/ca04a5a227aa2292879d39a93761caa9 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_path 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 *user_controller* https://gyazo.com/6ad0a21581bab51b91982ffa9f9378c8 class UsersController < ApplicationController before_action :require_user_logged_in def index end def show @user = User.find(params[:id]) @task = @user.tasks end def new @user = User.new end def create @user = User.new(user_params) if @user.save flash[:success] = 'ユーザを登録しました。' redirect_to root_url else flash.now[:danger] = 'ユーザの登録に失敗しました。' render :new end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end end *tasks_controller.rb* https://gyazo.com/84c61469c7e116b94e86ab2df96a58c3 class TasksController < ApplicationController before_action :require_user_logged_in def index @tasks = current_user.tasks end def show @task = current_user.tasks.find(params[:id]) end def new @task = Task.new end def create @task = current_user.tasks.build(task_params) if @task.save flash[:success] = 'Task が正常に投稿されました' redirect_to @task else flash.now[:danger] = 'Task が投稿されませんでした' render :new end end def edit @task = current_user.tasks.find(params[:id]) end def update @task = current_user.tasks.find(params[:id]) if @task.update(task_params) def update @task = current_user.tasks.find(params[:id]) if @task.update(task_params) flash[:success] = 'Task は正常に更新されました' redirect_to @task else flash.now[:danger] = 'Task は更新されませんでした' render :edit end end def destroy current_user.tasks.find(params[:id]) @task.destroy flash[:success] = 'Taskは正常に削除されました' redirect_to tasks_url end private # Strong Parameter def task_params params.require(:task).permit(:content, :status) end def correct_user @task = current_user.tasks.find_by(id: params[:id]) unless @task redirect_to root_url end end end *application_helper.rb* module ApplicationHelper end *sessions_helper.rb* https://gyazo.com/e60af03d3156e1c2a5c28e2bc17ee932 module SessionsHelper def current_user @current_user ||= User.find_by(id: session[:user_id]) end def logged_in? !!current_user end end *users_helper.rb module UsersHelper end *app/views/tasks* index.html.erb https://gyazo.com/2b2077bd3619627762cdd6f237963414 <% if logged_in? %> <h1>タスク一覧</h1> <ul> <% @tasks.each do |task| %> <li><%= link_to task.id, task %> : <%= task.status %> &gt; <%= task.content %></li> <% end %> </ul> <% end %> <%= link_to '新規タスクの投稿', new_task_path %> *app/views/tasks/show.html.erb https://gyazo.com/4b5e339d9f6f1835c970b51cc9cf4350 <h1>id: <%= @task.id %>のタスク詳細ページ</h1> <p>ステータス:<%= @task.status %></p> <p>タスク:<%= @task.content %></p> <%= link_to '一覧に戻る', tasks_path %> <%= link_to 'このタスクを編集する', edit_task_path(@task) %> <%= link_to 'このタスクを削除する', @task, method: :delete, data: { confirm: '本当に削除してよろしいですか?' } %> app/vies/tasks/<h1>タスク新規作成ページ</h1> <%= render 'form', task: @task %> <%= link_to '一覧に戻る', tasks_path %> *app/viesw/tasks/edit.html.erb* <h1>id: <%= @task.id %> のタスク編集ページ</h1> <%= render 'form', task: @task %> <%= link_to '一覧に戻る', tasks_path %> *app/views/users/new.html.erb* <div class="text-center"> <h1>Sign up</h1> </div> <div class="row"> <div class="col-sm-6 offset-sm-3"> <%= form_with(model: @user, local: true) do |f| %> <%= render 'layouts/error_messages', model: f.object %> <div class="form-group"> <%= f.label :name, 'Name' %> <%= f.text_field :name, class: 'form-control' %> </div> <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> <div class="form-group"> <%= f.label :password_confirmation, 'Confirmation' %> <%= f.password_field :password_confirmation, class: 'form-control' %> </div> <%= f.submit 'Sign up', class: 'btn btn-primary btn-block' %> <% end %> </div> </div> ### 試したこと エラー内容試して一週間ずっとログイン認証ができず嵌っています。 ルビー初学生なのですが、もう自分が何してるのか何がわかっていて何がわからないかもわかりません( ; ; ) 底辺な質問と言い訳してごめんなさい。批判中傷受け付けてません。心の優しい回答者さまを募集指定ます。 ### 補足情報(FW/ツールのバージョンなど) ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問