帮助程序类无法从视图访问

时间:2011-06-04 21:55:58

标签: ruby-on-rails ruby-on-rails-3 session helper session-cookies

我在下面定义了一个帮助类

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

但是我无法从用户#show view。

访问'current_user'变量
 <% if signed_in? %>
<p>
  <b>Current User:</b>
  <%= current_user.name %>
</p>


<% end %>

它说:nil的未定义方法`name':NilClass

任何人都可以提出建议吗? 方法current_user根本没有从索引中调用。

3 个答案:

答案 0 :(得分:7)

在控制器中放置include SessionsHelper包括控制器中的那些模块方法,因此可以在控制器方法中访问它们。您希望视图中提供辅助方法,因此您需要在应用程序控制器中使用helper SessionsHelper

话虽如此,我确实同意Jits,你在SessionsHelper中拥有的方法确实属于控制器,而不是帮助者。

答案 1 :(得分:2)

通常,您应该在current_user中定义application_controller等方法,然后在视图中将其作为帮助程序使用。通过这种方式,控制器可以访问它们(并且相信我,您很可能需要访问这样的东西)。例如:

def current_user
  ..
end
helper :current_user

答案 2 :(得分:0)

对我有什么帮助:

  • 帮助文件
  • 中定义要在控制器中使用的方法
  • 定义在相关模型文件中的视图中使用的方法

示例

假设您在 user_helper.rb

def something
 2 + 2
end

只需将该代码移动到

models/user.rb

并且无需任何进一步操作即可在视图中访问它。