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

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

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

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

Q&A

解決済

2回答

1470閲覧

railsの起動時のName Errorについて

gunofu

総合スコア8

Ruby on Rails

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

0グッド

1クリップ

投稿2018/08/23 08:30

編集2018/08/26 03:06

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
初めての質問です。
現在、ruby on railsを勉強している初心者です。
画像投稿サイトのサインインの認証チェックを実行しようと思い以下を書いたところerrorに原因が分からず困っています。
よろしければご教授いただければ幸いです。

エラーメッセージ
Routing Error
undefined method `user_signed_in?' for UsersHelper:Module

該当のソースコード

users_controller.rb class UsersController < ApplicationController before_action :authorize, except: [:sign_up, :sign_up_process, :sign_in, :sign_in_process] before_action :redirect_to_top_if_signed_in, only: [:sign_up, :sign_in] def top end # ユーザー登録ページ def sign_up @user = User.new render layout: "application_not_login" end # サインインページ def sign_in @user = User.new render layout: "application_not_login" end def sign_out #ここに処理を実装 user_sign_out #サインインページへ遷移 redirect_to sign_in_path and return end # サインイン処理 def sign_in_process # パスワードをmd5に変換 password_md5 = User.generate_password(user_params[:password]) # メールアドレスとパスワードをもとにデータベースからデータを取得 user = User.find_by(email: user_params[:email], password: password_md5) if user # セッション処理 user_sign_in(user) # トップ画面へ遷移する redirect_to top_path and return end end #ユーザー登録処理 def sign_up_process user = User.new(user_params) if user.save #登録が成功したらサインインしてトップページへ user_sign_in(user) redirect_to top_path and return else #登録が失敗したらユーザー登録ページへ flash[:danger] = "ユーザー登録に失敗しました。" redirect_to('/') end end private def user_params params.require(:user).permit(:name, :email, :password) end #現在サインイン中のユーザー情報を返す def current_user if @current_user.nil? @current_user = User.find_by(id: session[:user_id]) else @current_user end end end
users_helper.rb module UsersHelper # ユーザーがサインインしていればtrue, そうでなければfalseを返す def user_signed_in? current_user.present? end # 渡されたユーザーでサインインする def user_sign_in(user) session[:user_id] = user.id end #サインアウトする def user_sign_out session.delete(:user_id) @current_user = nil end # 現在サインイン中のユーザー情報を返す def current_user if @current_user.nil? @current_user = User.find_by(id: session[:user_id]) else @current_user end end # 認証チェック def authorize redirect_to sign_in_path unless user_signed_in? end # サインイン済みならトップページに遷移する def redirect_to_top_if_signed_in redirect_to top_path and return if user_signed_in? end end
models/user.rb class User < ApplicationRecord # データの保存前に、パスワードを暗号化するメソッド(convert_password)を実行するよう設定 before_save :convert_password #バリデーション VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+.[a-z]+\z/i validates :name, presence: true validates :email, presence: true, format: {with: VALID_EMAIL_REGEX}, uniqueness: true validates :password, presence: true, length:{minimun: 6} # パスワードを暗号化するメソッド def convert_password self.password = User.generate_password(user_params[:password]) end # メールアドレスとパスワードをもとにデータベースからデータを取得 user = User.find_by(email: user_params[:email], password: password_md5) end

皆様、ご意見ありがとうございます。
返信遅くなり申し訳ありません。
users_helper.erの6行目のご指摘がありましたので、修正したところ以下のerrorメッセージに
変わりました。
イメージ説明

ちなみにroutes.rbは以下になります。

routes.rb

1Rails.application.routes.draw do 2 root 'users#sign_up' 3 get'top', to:'users#top', as: :top 4 get 'users/top' 5 resources :posts 6 get '/profile/(:id)', to:'users#show',as: :profile 7 get '/profile/edit', to:'users#edit',as: :profile_edit 8 get '/follower_list/(:id)', to:'users#follower_list',as: :follower_list 9 get '/follow_list/(:id)', to:'users#follow_list',as: :follow_list 10 get '/sign_up', to:'users#sign_up',as: :sign_up 11 get '/sign_in', to:'users#sign_in',as: :sign_in 12 get '/sign_out', to:'users#sign_out',as: :sign_out 13 post '/sign_up', to:'users#sign_up_process' 14 post '/sign_in', to:'users#sign_in_process' 15 # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 16end

ご意見、ご教授お願い致します。

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

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

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

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

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

psuke

2018/08/23 14:20

```users_helper.rb```の下から6行目に```def ... end```で囲まれていないredirect_toの構文がありますが、これは意図的なものでしょうか?
shiena

2018/08/24 03:56

ブラウザにエラー画面が出ているならそのキャプチャを、ログにエラーが出ているなら抜粋せずにそのまま載せてください。長くなってもいいのですが漏れがあると原因特定が難しいからです。
guest

回答2

0

ベストアンサー

UserモデルからUsersControllerのメソッドであるuser_paramsを使っているためエラー画面でundefined local variable or methodエラーになっています。
モデルからコントローラーのメソッドや変数は参照できないので、コントローラーからモデルを利用するように書くべきです。

投稿2018/08/27 06:51

shiena

総合スコア1825

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

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

0

routes.rbのコードはどのようになっていますか?
ルーティングの定義が誤っている恐れがあります。

投稿2018/08/24 01:55

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問