应用程序控制器有一个辅助方法:可以从我的所有视图访问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。它在视图中工作得很好。
你能帮助我吗?答案 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
。没有错误,您只需要找出查询返回零记录的原因。