-1
NoMethodError in UsersController#show

undefined method `signed_in?' for #<UsersController:0x5bf3980>

Rails.root: C:/test_app
Application Trace | Framework Trace | Full Trace

app/controllers/users_controller.rb:91:in `signed_in_user'

Request
Parameters:
{"id"=>"1"}

Show session dump

Show env dump
Response

Headers:
None

Users_Controller 内

    def signed_in_user
      redirect_to signin_path, notice: "Please Sign In." unless signed_in?
    end

SessionsController で

  def signed_in?
    !current_user.nil?
  end

module SessionsHelper

def sign_in(user)
   cookies.permanent.signed[:remember_token] = [user.id, user.salt]
   self.current_user = user
end

def sign_out
   cookies.delete(:remember_token)
   self.current_user = nil
end

 def current_user=(user)
       @current_user = user
 end

 def current_user
       @current_user ||= user_from_remember_token
 end

 def signed_in?
       !current_user.nil?
 end

 def create
         user = User.authenticate(params[:session][:email],
                                                          params[:session][:password])

         if user.nil?
                 flash.now[:error] = "Invalid email/password combination."
                 @title = "Sign In"
                 render 'new'
         else
             sign_in user
             flash.now[:error] = "Welcome, #{user.name}"
             render 'AdCon'
         end
 end

 def destroy
         sign_out
         redirect_to root_path
 end        

       private

               def user_from_remember_token
                       User.authenticate_with_salt(*remember_token)
               end

               def remember_token
                       cookies.signed[:remember_token] || [nil,nil]
               end  
end

*編集: ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** **

私は次のチュートリアルを使用しています: http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users @ Listing 9.12

リスト9.12。フィルターの前に signed_in_user を追加します。

app/controllers/users_controller.rb

class UsersController < ApplicationController
    before_filter :signed_in_user, only: [:edit, :update]
    .
    .
    .
    private

        def signed_in_user
             redirect_to signin_path, notice: "Please sign in." unless signed_in?
        end
end

ヘルパーを SessionsController に含めたとき、メッセージを受け取りました

未定義のメソッド `signed_in?' for # 抽出したソース (9 行目あたり):

<div>
 <% if controller.signed_in?  %> <----LINE 9
 <%= link_to "Sign Out", signout_path, :method => :delete %>
 <% else %>
 <%= link_to "Sign IN" , signin_path %>

次のようにヘルパーを含めました: class SessionsController < ApplicationController include SessionsHelper

これを機能させることができなかったので、ヘルパー メソッドを SessionsController にコピーしたところ、エラーはなくなりました。そして今、9.12 where signed_in? で問題が発生しています。未知の方法です。signed_in? ヘルパーを介して SessionsController にあります。UserController はその機能にアクセスできますか。私はレールが初めてで、混乱しています。

すべてのフィードバックに感謝します

編集: * ** * ** * ** * ** * ** * **

ここにアプリケーションコントローラーがあります

class ApplicationController < ActionController::Base

  protect_from_forgery
  include ActionView::Helpers::SessionsHelper

  private

  def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

  helper_method :current_user
end
4

2 に答える 2

1

共有メソッドを間違った場所で宣言しています。signed_in?内で定義する必要がありますApplicationController。これは、他のすべてのコントローラーの共有基本クラスです。本質的に、あなたがやろうとしていることをする方法はありません。はあなたのメソッドにUsersControllerアクセスできません。また、アクセスできるはずもありません。SessionControllerそれはコントローラーがどのように機能するかではありません。

current_user、、current_user=およびsigned_in?すべては、からでApplicationControllerはなく、に属します。これらは、から継承するすべてSessionsControllerのコントローラによって使用されることを意図した共有メソッドだからです。ApplicationController

于 2012-06-22T18:53:21.537 に答える
0

別のプロジェクトの sessionhelper ファイルを開いていて、現在のプロジェクトに関連付けられているファイルではなく、そのファイルを編集していたことがわかりました。助けてくれてありがとう。

于 2012-07-12T02:45:05.970 に答える