Rails 3 - 控制器中的构造函数?

时间:2011-07-30 00:01:29

标签: ruby-on-rails-3 controller action

我需要将数据库中的值存储在变量中,我需要从控制器中的所有操作中访问此变量。

例如,我有控制器home,它有3个动作:

  • 接触
  • 博客

我尝试将值存储到application_controller.rb中的变量中,但这不起作用 我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

如果要访问所有控制器中的特定变量,请执行以下操作。

进入应用程序控制器:

before_filter :set_my_variables

private
def set_my_variables
  @variable = MyModel.find(YOUR_CONDITION)
end

例如,在您的家庭控制器中,您将能够访问@variable。

希望这有帮助。

答案 1 :(得分:2)

这是关于持久性的。为了解决这个事实,网站是无状态的,你可以通过将数据存储在cookie中来保存数据。 Rails为您提供了一种方便的方法,称为会话哈希。 你也可以使用flash哈希(这也是一个会话哈希) 在您获得要存储的值时,只需调用

session[:some_variable] = some_variable

然后当你想要检索那个变量时,只需要调用

some_variable = session[:some_variable]

将some_variable替换为对您有意义的内容

如果要对所有控制器操作执行此操作,则before_filter可能很有用 在这里阅读有关before_filters http://apidock.com/rails/ActionController/Filters/ClassMethods/before_filter

的信息

不要在会话中存储大对象或对象数组。如果你需要保持对active_record对象的引用,那么只存储记录的ID,那么你可以在需要时用一个find来检索该记录