🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

877閲覧

ProgateのRailsコースのソースコードをcloud9で動作させた際にログインができない

gawao

総合スコア5

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

Ruby on Rails

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1グッド

1クリップ

投稿2020/01/04 06:30

前提・実現したいこと

◾️前提
ProgateのRailsコースを終了し、cloud9上でrailsコースの最終版ソースコードをいじっていこうと思ったのですが、
以下のような問題が発生し早速つまづいております。
有識者の皆様のお知恵をお貸しいただければ幸いでございます。
情報として不充分な点がございましたらお申し付けください。
何卒よろしくお願いいたします。

◾️エラー内容
ProgateのRailsコースのソースコードをcloud9で動作させた際にログインができない。
Progate上では問題なくログイン動作が可能であるのに、cloud9上ではログインができなくて悩んでいます。
ログインフォームにemail,passwordを押してログインボタンを押下すると下記の画面になる。
(ヘッダーのメニューがログイン後の内容に変わっていない、ログインを知らせるflashも表示されない)
(投稿内容が表示されていないのはDBに投稿内容がないので問題ないです。)
◾️ログインフォーム
ログインフォーム
◾️ログインボタン押下後(現状)
ログインボタン押下後(現状)
◾️ログインボタン押下後(Progate)
ログインボタン押下後(Progate)

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

原因としては、

application.contoroller.rbの
@current_user = User.find_by(id: session[:user_id])にある
session[:user_id]に値が入っていなく
@current_userが
nilになっていることが色々試していく中で分かったのですが、
なぜuserscontroller.rbのdef login内で定義した
session[:user_id] = @user.idが保存されていないのか
ググってっも分からず、、

該当のソースコード

applicationcontroller.rb

class ApplicationController < ActionController::Base before_action :set_current_user def set_current_user @current_user = User.find_by(id: session[:user_id]) end def authenticate_user if @current_user == nil flash[:notice] = "ログインが必要です" redirect_to("/login") end end def forbid_login_user if @current_user flash[:notice] = "すでにログインしています" redirect_to("/posts/index") end end end

◾️userscontroller.rb

class UsersController < ApplicationController before_action :authenticate_user, {only: [:index, :show, :edit, :update]} before_action :forbid_login_user, {only: [:new, :create, :login_form, :login]} before_action :ensure_correct_user, {only: [:edit, :update]} def index @users = User.all end def show @user = User.find_by(id: params[:id]) end def new @user = User.new end def create @user = User.new( name: params[:name], email: params[:email], image_name: "default_user.jpg", password: params[:password] ) if @user.save session[:user_id] = @user.id flash[:notice] = "ユーザー登録が完了しました" redirect_to("/users/#{@user.id}") else render("users/new") end end def edit @user = User.find_by(id: params[:id]) end def update @user = User.find_by(id: params[:id]) @user.name = params[:name] @user.email = params[:email] if params[:image] @user.image_name = "#{@user.id}.jpg" image = params[:image] File.binwrite("public/user_images/#{@user.image_name}", image.read) end if @user.save flash[:notice] = "ユーザー情報を編集しました" redirect_to("/users/#{@user.id}") else render("users/edit") end end def login_form end def login @user = User.find_by(email: params[:email]) if @user && @user.authenticate(params[:password]) session[:user_id] = @user.id flash[:notice] = "ログインしました" redirect_to("/posts/index") else @error_message = "メールアドレスまたはパスワードが間違っています" @email = params[:email] @password = params[:password] render("users/login_form") end end def logout session[:user_id] = nil flash[:notice] = "ログアウトしました" redirect_to("/login") end def likes @user = User.find_by(id: params[:id]) @likes = Like.where(user_id: @user.id) end def ensure_correct_user if @current_user.id != params[:id].to_i flash[:notice] = "権限がありません" redirect_to("/posts/index") end end end

◾️postscontroller.rb

class PostsController < ApplicationController before_action :authenticate_user before_action :ensure_correct_user, {only: [:edit, :update, :destroy]} def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find_by(id: params[:id]) @user = @post.user @likes_count = Like.where(post_id: @post.id).count end def new @post = Post.new end def create @post = Post.new( content: params[:content], user_id: @current_user.id ) if @post.save flash[:notice] = "投稿を作成しました" redirect_to("/posts/index") else render("posts/new") end end def edit @post = Post.find_by(id: params[:id]) end def update @post = Post.find_by(id: params[:id]) @post.content = params[:content] if @post.save flash[:notice] = "投稿を編集しました" redirect_to("/posts/index") else render("posts/edit") end end def destroy @post = Post.find_by(id: params[:id]) @post.destroy flash[:notice] = "投稿を削除しました" redirect_to("/posts/index") end def ensure_correct_user @post = Post.find_by(id: params[:id]) if @post.user_id != @current_user.id flash[:notice] = "権限がありません" redirect_to("/posts/index") end end end

◾️login_form.html.erb

<div class="main users-new"> <div class="container"> <div class="form-heading">ログイン</div> <div class="form users-form"> <div class="form-body"> <% if @error_message %> <div class="form-error"> <%= @error_message %> </div> <% end %> <%= form_tag("/login") do %> <p>メールアドレス</p> <input name="email" value="<%= @email %>"> <p>パスワード</p> <input type="password" name="password" value="<%= @password %>"> <input type="submit" value="ログイン"> <% end %> </div> </div> </div> </div>

◾️route.rb

Rails.application.routes.draw do post "likes/:post_id/create" => "likes#create" post "likes/:post_id/destroy" => "likes#destroy" post "users/:id/update" => "users#update" get "users/:id/edit" => "users#edit" post "users/create" => "users#create" get "signup" => "users#new" get "users/index" => "users#index" get "users/:id" => "users#show" post "login" => "users#login" post "logout" => "users#logout" get "login" => "users#login_form" get "users/:id/likes" => "users#likes" get "posts/index" => "posts#index" get "posts/new" => "posts#new" get "posts/:id" => "posts#show" post "posts/create" => "posts#create" get "posts/:id/edit" => "posts#edit" post "posts/:id/update" => "posts#update" post "posts/:id/destroy" => "posts#destroy" get "/" => "home#top" get "about" => "home#about" end

◾️gemfile

source 'https://rubygems.org' gem 'rails', '5.0.3' # Use Puma as the app server gem 'puma', '3.6.2' # Use SCSS for stylesheets gem 'sass-rails', '5.0.6' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '3.0.4' gem 'pry-rails', '0.3.4' # Use jquery as the JavaScript library gem 'jquery-rails', '4.2.2' # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks gem 'turbolinks', '5.0.1' gem 'bcrypt' group :development, :test do gem 'sqlite3', '1.3.13' gem 'byebug', '9.0.6', platform: :mri gem 'web-console', '3.4.0' gem 'listen', '3.0.8' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring', '2.0.1' gem 'spring-watcher-listen', '2.0.1' end

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

解決に直結するかは分かりませんが、
application_controller や
users_controller のように
ファイル名はアンダーバーで区切った方が良いかと…
Railsのファイル名はスネークケース
です。これを怠ると予期せぬエラーに遭遇する可能性が高いと思います。

投稿2020/01/04 22:16

tenten11055

総合スコア67

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問