来自application_controller的Helper方法无法从视图中访问

时间:2014-04-30 21:09:48

标签: ruby-on-rails helpermethods

应用程序控制器有一个辅助方法:可以从我的所有视图访问current_user。但是从我看来,pro_user是完全无法访问的。

    def current_user
      @current_user ||= User.find_by_auth_token( cookies[:auth_token]) if cookies[:auth_token]
      rescue ActiveRecord::RecordNotFound
    end
    helper_method :current_user

   def pro_user

        @pro_user ||= Subscription.where(:email => current_user.email).pluck(:email) 
        return @pro_user
        rescue ActiveRecord::RecordNotFound

   end
   helper_method :pro_user 

现在在视图中,如果我访问pro_user,它总是为零。但有趣的是,我在应用程序控制器中也有一个名为current_user的方法,它是一个helper_method。它在视图中工作得很好。

你能帮助我吗?

1 个答案:

答案 0 :(得分:3)

你误解了你的问题。它运行得很好,视图肯定可以看到你的方法,但你的方法正在返回nil。你的方法没有返回任何东西。

如果该方法实际上无法访问,您会看到该效果的异常。 Ruby不会简单地将未知方法解析为nil

  

在视图中我试图看看pro_user.email.blank?并且它一直没有。

这不是使用您发布的方法返回的值的有效方法。它返回一个数组。

  

我也在视图中尝试了@pro_user。一切都在应用程序控制器中正确打印,但在视图中为零。

也不是这样。该方法返回零个或多个电子邮件地址的数组,这是pluck所做的。返回值永远不会响应.email。您需要使用pro_email.any?来测试数组是否包含任何项目。

您也无法简单地访问@pro_user。这不会调用默认情况下访问 nil的成员变量的方法。

  

我是<%if pro_user.blank? %GT; {.. do blah ..}

这不是有效的erb语法。假设您的语法实际上是正确的,blank?将为空数组返回true。该方法返回[],而不是nil。没有错误,您只需要找出查询返回零记录的原因。