我需要将数据库中的值存储在变量中,我需要从控制器中的所有操作中访问此变量。
例如,我有控制器home
,它有3个动作:
我尝试将值存储到application_controller.rb
中的变量中,但这不起作用
我怎么能这样做?
答案 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来检索该记录