【问题标题】:Helper Class not Accessible from View从视图中无法访问帮助程序类
【发布时间】:2011-09-08 12:56:22
【问题描述】:

我定义了一个辅助类如下

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  

我在我的应用程序控制器中包含了 Helper 类

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

但是我无法从 users#show 视图访问“current_user”变量。

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


<% end %>

它说:nil:NilClass 的未定义方法“名称”

谁能给点建议? 方法 current_user 根本不会从索引中调用。

【问题讨论】:

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


    【解决方案1】:

    对我有什么帮助:

    • 帮助文件中定义要在控制器中使用的方法
    • 在相关 model 文件中定义要在 view 中使用的方法

    示例

    假设您在user_helper.rb 中有这个

    def something
     2 + 2
    end
    

    只需将该代码移入

    models/user.rb

    并且无需任何进一步的努力就可以在视图中访问它。

    【讨论】:

      【解决方案2】:

      通常,您应该在application_controller 中定义current_user 之类的方法,然后将它们用作视图中的助手。这样控制器就可以访问它们(相信我,你很可能需要访问类似的东西)。示例:

      def current_user
        ..
      end
      helper :current_user
      

      【讨论】:

      • 但是我已经在 ApplicationController 中包含了 Helper 类。在一些教程中看到了类似的东西。因此就这样走了。
      • 我刚刚添加了 视图中的代码 sn-p。已登录?函数被调用。但是找不到当前用户。
      • 我认为应该是 helper_method 而不是 helper
      【解决方案3】:

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

      话虽如此,我确实同意 Jits 的观点,即您在 SessionsHelper 中拥有的方法确实属于控制器而不是助手。

      【讨论】:

      • 谢谢。包括帮助程序 SessionsHelper 确实解决了访问问题。
      猜你喜欢
      • 2017-07-15
      • 2018-07-10
      • 1970-01-01
      • 2011-04-01
      • 1970-01-01
      • 2021-04-04
      • 2018-11-06
      • 2011-12-01
      • 1970-01-01
      相关资源
      最近更新 更多