2012-06-22 1 views
-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 

* EDIT : ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ****

Я использую учебник по: http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users @ Листинг 9.12

Листинг 9.12. Добавление signed_in_user перед фильтром.

приложение/контроллеры/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? для # Извлеченного источника (около линии # 9):

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

Я включил Helper так: класса SessionsController < ApplicationController включает SessionsHelper

я не мог получить эту работу, поэтому я скопировал вспомогательные методы в SessionController, и ошибка ушла. И теперь у меня проблема с 9.12, где signed_in? является неизвестным методом. и это имеет смысл, потому что signed_in? находится в SessionController через помощника. может UserController получить доступ к этой функции. Я новичок в рельсах и смущен.

спасибо за обратную связь

EDIT: * ** * ** * ** * ** * ** * **

Адрес ApplicationController

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 
+0

Немного свет на подробностях. Разве нет помощника? Используете ли вы какие-либо рамки? –

+0

'UsersController MurifoX

+0

Дэйв, я работаю над проверкой подлинности на тестовом сервере. Я добавил помощника. Спасибо за вашу помощь! – stevenaq

ответ

1

Вы объявляете свои общие методы не в том месте. signed_in? должен быть определен внутри вашего ApplicationController, который является общим базовым классом для всех ваших других контроллеров. По сути, нет никакого способа сделать то, что вы пытаетесь сделать. UsersController не может получить доступ к вашим методам SessionController, а также не должен. Это не так, как работают контроллеры.

current_user, current_user= и signed_in? все принадлежат в вашем ApplicationController, а не ваш SessionsController, потому что они общие методы, предназначенные для использования всех контроллеров, которые наследуют от ApplicationController.

+0

Указание неверно. 'current_user' является * чрезвычайно * распространенным методом в Rails-приложениях, и он всегда * определен в' ApplicationController'. – meagar

+0

Включил ApplicationController в сообщение. – stevenaq

0

Я понял, у меня был файл sessionhelper из другого открытого проекта, и я редактировал этот, а не тот, который связан с моим текущим проектом. Спасибо за помощь.

Смежные вопросы