【问题标题】:How do I define a variable that all my views can access?如何定义我的所有视图都可以访问的变量?
【发布时间】:2018-01-31 23:34:09
【问题描述】:

我有一个 Rails 5 网络应用程序(几乎)。我想在我的所有视图中包含一个属性。我在某处读到这样做的方法是在我的应用程序控制器中定义一个辅助方法,所以我定义了

class ApplicationController < ActionController::Base

  before_action :store_last_page_visited

  protect_from_forgery with: :exception

  helper_method :unvoted_people
    ...

    def unvoted_people
      @unvoted_people = People.find_most_voted(current_user)
    end

我的所有页面只有一个应用程序布局,但在我看来是之后的逻辑

<% if @unvoted_people %>

永远不会被调用,即使我知道查询应该返回结果。包含我的所有视图都可以访问的模型属性的正确方法是什么?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-5 rails-activerecord helpermethods


    【解决方案1】:

    您应该调用您在 application_controller 中定义的辅助方法 unvoted_people,您可以摆脱实例变量并从 unvoted_people 方法中返回它。

    【讨论】:

    • 好吧,这似乎可行。但我有一个后续问题。在我的 "" 行之后,我有一个 "" 行来迭代结果。我是否反复调用该方法?如何只调用一次方法并多次使用其结果?
    • @unvoted_people ||= People.find_most_voted(current_user)
    • @Natalia 是的,您可以使用 Brad 的建议来缓存这些结果,这样您就不会在每次调用该方法时都访问数据库
    • 谢谢,我很清楚,“@unvoted_people ||= People.find_most_voted(current_user)”行属于哪里,这是我的辅助方法的主体吗?
    • @Natalia 没错
    猜你喜欢
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多