【问题标题】:Helper method from application_controller not accessible from view来自 application_controller 的辅助方法无法从视图中访问
【发布时间】:2023-03-24 10:35:01
【问题描述】:

应用程序控制器有一个辅助方法: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。它在视图中工作正常。

请问您能帮帮我吗?

【问题讨论】:

  • 我不明白你的查询的用例,Subscription.where(:email => current_user.email).pluck(:email)?当您已经拥有 current_user.email 时,为什么要通过触发查询从 subscriptions 表中提取 相同的电子邮件
  • Kirti current_user.email 在用户成功购买后存储在订阅表中。 pro_user 方法位于应用程序控制器中的 current_user 方法下方,用于检查用户是否是高级用户,即 pro_user。在视图中,我试图查看 pro_user.email.blank 是否?它一直为零。我还在视图中尝试了@pro_user。一切都在应用程序控制器中正确打印,但在视图中为 nil。
  • Kirti,你已经帮了我两次了!所以我希望你能再次对此有所了解:)
  • 您的方法可以在视图中访问,问题在于返回 0 条记录的查询。您需要弄清楚为什么没有为 current_user 保存订阅记录。按照微薄的回答。他对你的问题给出了详尽的解释。

标签: ruby-on-rails helpermethods


【解决方案1】:

您误诊了您的问题。它工作得很好,视图肯定可以看到你的方法,但是你的方法返回nil。您的方法没有返回任何内容。

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

在我试图查看 pro_user.email.blank 的视图中?并且一直为零。

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

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

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

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

如果 pro_user.blank 我会 { ..do blah.. }

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

【讨论】:

  • 我删除了recuse语句并在方法末尾添加了return @pro_user。还是没用。
  • @user2511030 你是如何调用方法的?
  • 在视图中:我做 { ..do blah.. }
  • meagar 你的意思是我必须做 pro_user.any 吗?我遇到的困难是与 pro_user 非常相似的 current_user 方法在我的所有视图中都可以访问。我可以在所有视图中使用@current_user, current_user.email 并且效果很好。
  • meagar,是的,如果用户不是专业用户,它将返回 [],如果成功收到付款,则返回 ["user@email.com"]。所以我一直在做.blank?空的?零?在视图中的 pro_user 上。我会尝试.any?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
相关资源
最近更新 更多