Класс помощника недоступен из вида - PullRequest
6 голосов
/ 05 июня 2011

Я определил вспомогательный класс, как показано ниже

module SessionsHelper

  def current_user 
        @current_user= User.find_by_fbid(session[:fbid])
  end


  def sign_in(user)
        session[:fbid] = user.fbid
        @current_user = user

  end


  def signed_in?
       !current_user.nil?
  end


  end  

Я включил вспомогательный класс в мой контроллер приложений

class ApplicationController < ActionController::Base
  protect_from_forgery
  include SessionsHelper


end

Метод входа вызывается из контроллера сеанса

class SessionsController < ApplicationController


  def create

  user = User.find_or_create_by_fbid(params[:user][:fbid]) 
  user.update_attributes(params[:user])
  sign_in(user)
  redirect_to user_path(user)

  end

end

Однако я не могу получить доступ к переменной 'current_user' от пользователей # представление представления.

 <% if signed_in? %>
<p>
  <b>Current User:</b>
  <%= current_user.name %>
</p>


<% end %>

В нем говорится: неопределенный метод `name 'для nil: NilClass

Можеткто-нибудь, пожалуйста, посоветуйте?Метод current_user вообще не вызывается из индекса.

Ответы [ 2 ]

7 голосов
/ 05 июня 2011

Помещение include SessionsHelper в ваш контроллер включает эти методы модуля в контроллере, поэтому они доступны в ваших методах контроллера. Вы хотите, чтобы вспомогательные методы были доступны в ваших представлениях, поэтому вам нужно использовать helper SessionsHelper в контроллере приложения.

При этом я согласен с Jits, что методы, которые вы используете в SessionsHelper, действительно принадлежат контроллеру, а не помощнику.

2 голосов
/ 05 июня 2011

Как правило, вы должны иметь методы типа current_user, определенные в вашем application_controller, а затем сделать их доступными в качестве помощников в представлениях. Таким образом, контроллеры получают доступ к ним (и, поверьте мне, вам, скорее всего, понадобится доступ к таким вещам). Пример:

def current_user
  ..
end
helper :current_user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...