我在下面定义了一个帮助类
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根本没有从索引中调用。
答案 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
并且无需任何进一步操作即可在视图中访问它。