Rails中的全局变量

Ale*_*vin 9 ruby ruby-on-rails

我的Rails应用程序中有一个反馈表单.反馈表单需要初始化@support变量,并且应该在每个页面上都可见.初始化很短:

@support = Support.new(:id => 1)
Run Code Online (Sandbox Code Playgroud)

但是,将此变量初始化一次并从任何地方访问它都会很不错.怎么可能呢?

小智 12

您可以使用辅助方法(在应用程序控制器中)初始化支持变量.像这样的东西:

class ApplicationController < ..
   ...
   helper_method :my_var

   def my_var
      @support = Support.new(:id => 1)
   end
   ...

 end
Run Code Online (Sandbox Code Playgroud)


San*_*nda 5

全局变量以美元符号'$'开头,如:

$support = Support.new(:id => 1)
Run Code Online (Sandbox Code Playgroud)

但是,全局变量很糟糕:-)你应该阅读"Simone Carletti"的这篇文章.


Iai*_*ain 5

您可能希望在ApplicationController中添加一些内容,而不是全局变量.

或者:

before_filter initialize_support

def initialize_support
      @support = Support.new(:id => 1)
end
Run Code Online (Sandbox Code Playgroud)

要么:

helper_method support_form

def support_form
      @support_form ||= Support.new(:id => 1)
end
Run Code Online (Sandbox Code Playgroud)