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

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

ただいまの
回答率

89.72%

NoMethodError in SessionsController#createに関して

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,668

s.k

score 268

こんにちは。
ログイン情報記録機能に関して理解できない点がありますので、質問させていただきます。

【やりたいこと】
login画面のRemember(アカウント設定の保存)機能を実装すること

【やったこと】
・user.rb・sessions_helper.rb・sessions_controllerに関連するコードを書きました。
詳細は下に記します。

【エラー】
ブラウザでRememberボタンを押すとエラーが表示されます。

そして表示されるエラーは以下です。

ターミナルで表示されるエラーは以下です。

NoMethodError (undefined method ` remember' for #<SessionsController:0x0000000925a428>
Did you mean?  remember):
  app/controllers/sessions_controller.rb:9:in `create'


  Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_source.erb (5.8ms)
  Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_trace.html.erb (2.6ms)
  Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_request_and_response.html.erb (1.3ms)
  Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/_web_console.html.erb (1.0ms)
  Rendered /usr/local/rvm/gems/ruby-2.3.0/gems/web-console-2.0.0.beta3/lib/action_dispatch/templates/rescues/diagnostics.html.erb within rescues/layout (123.1ms)

【session_controller】
下の※のコードにあるrememberが未定義とのエラー内容ですが、
他ファイルできちんと定義しています...

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      log_in user
     ** params[:session][:remember_me]=='1'?remember(user):forget(user)**
   redirect_to user
    else
      flash.now[:danger]='Invalid email/password combination'
    render 'new'
    end
  end

  def destroy
    log_out if logged_in?
    redirect_to root_url
  end


end


【session_helper.rb】

def remember(user)
        user.remember
        cookies.permanent.signed[:user_id] = user.id
        cookies.permanent[:remember_token] = user.remember_token
    end
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

エラー文は読んでいますか? undefined method ` remember' は「remember なんてメソッドはありません。」と書いています。

Rubyはよくわかりませんが、s.kさんの別の質問に書いてあるuserの定義と変わらないのであれば remember(user) ではなく user.remember では?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/17 12:23

    keiさん

    ありがとうございます!
    エラー文読んでおります!

    user.rememberためしてみましたが、できませんでした...
    railsのチュートリアルと同じコードなので原因がわからないという状況でございます。

    いろいろ試してはみたのですが…

    キャンセル

  • 2016/09/17 12:58

    それは失礼しました。
    Rubyを触ったことが無いため適切なアドバイスが出来ず申し訳ないのですが、teratailのようなQ&Aサイトの使い方について1点アドバイスがあります。

    「できませんでした」という返答は「エラーが出ました」と同じように情報0です。何をしてどういうエラーが出たか、想定していた挙動とどう違ったかを書かないと回答者には伝わりません。(←えらそうに書いておいて詳しく書かれても多分私にはわからないのですみません)

    ---

    下記のようなものがあるので、ソースを見比べてみてはいかがでしょうか。

    【GitHub - yasslab/sample_apps: Railsチュートリアルの各章が終わった状態を集めたリポジトリです。】
    https://github.com/yasslab/sample_apps

    キャンセル

  • 2016/09/17 13:05

    keiさん

    ご指摘ありがとうございます。
    想定していた挙動とどう違ったかを書かないと回答者には伝わりません。
    ここ足りてないですね。。。

    エラーに夢中で回答者へ対する配慮が欠けていました。
    自分でも質問文を読んでみましたが、これでは伝わりませんね( ;∀;)

    書き直します!
    資料ありがとうございます!

    キャンセル

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

  • ただいまの回答率 89.72%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る