【问题标题】:Controller variables are not recognizable in some views在某些视图中无法识别控制器变量
【发布时间】:2016-03-10 11:14:39
【问题描述】:

如何在 Ruby on rails 中的应用程序控制器和不同视图之间传递变量?是否有任何全局范围可以帮助我们跟踪在控制器中创建的任何变量并在同一应用程序的任何视图代码中使用它?

【问题讨论】:

  • 你想达到什么目的?你能举个例子吗?
  • 我实际上正在开发一个 redmine 插件。我在 "myPlugin/app/views" 中有我的视图文件 "_index.html.erb" 。我无法使用“_index.html.erb”视图文件中的实例变量(在我的应用程序控制器中声明)。日志文件说“@project”未被识别......尽管如此,我还是能够从 myPlugin/app/views/myPlugin/index.html.erb 中的另一个视图与同一个控制器进行交互

标签: ruby-on-rails ruby view scope redmine


【解决方案1】:

要在视图中使用应用程序控制器中的方法,请将其标记为辅助方法。 像这样的

class ApplicationController < ActionController::Base

  def current_user
    @current_user ||= User.find(session[:user_id])
  end

  helper_method :current_user

end

现在,current_user 方法可在所有视图中访问,并可用于获取 @current_user 实例变量。

【讨论】:

    【解决方案2】:

    只需在应用程序助手中编写您的代码,即可通过应用程序中的任何视图访问它..

    【讨论】:

      【解决方案3】:

      请阅读http://guides.rubyonrails.org/action_controller_overview.html(特别是第 3 部分)

      虽然这不是最佳选择,但我建议阅读有关在控制器中公开变量的内容。

      https://github.com/hashrocket/decent_exposure 要么 https://github.com/netguru/decent_decoration

      专为此而创建,我推荐它们。

      【讨论】:

        【解决方案4】:

        这样声明的变量:

        @current_user
        

        例如,只要在该视图的控制器中调用创建该变量的方法,就可以在任何视图中使用。

        您可以在此处阅读更多关于 ruby​​ 变量的信息http://ruby-doc.org/docs/ruby-doc-bundle/UsersGuide/rg/variables.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-05
          • 1970-01-01
          • 1970-01-01
          • 2018-11-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多