我的应用程序取决于变量page_name
,但变量page_name
中的值仅在提交表单后设置。
我应该使用会话吗?当我搜索时,我发现如果我的应用程序在负载均衡器后面会破坏会话。
在整个Rails应用程序中使变量可访问的更好方法是什么?
创建常量可以解决我的问题,但是在用户填写表单字段中的数据并提交数据之前,不会设置变量中的值。所以基本上,用户负责填充整个应用程序所依赖的变量中的值。
答案 0 :(得分:5)
您需要将值保存在数据库(使用ActiveRecord)或共享内存缓存服务器中(假设您可以接受该变量,如果它被推出缓存,则会丢失)。
您只需在控制器创建操作中设置数据库值,就像任何其他模型一样。
首先,创建模型
@font-face {
font-family: OpenSansLight;
src: url(path/to/OpenSans-CondLight.ttf);
}
@font-face {
font-family: OpenBold;
src: url(path/to/OpenSans-CondBold.ttf);
}
@font-face {
font-family: OpenRegular;
src: url(path/to/OpenSans-Regular.ttf);
}
要通过rails generate model variable_name variable_value
操作保存其中的值:
def create
然后使用
从应用中的任意位置进行检索@app_store = AppStore.find_or_initialize_by_name('variable_name')
@app_store.variable_value = secure_params[:variable_value]
@app_store.save
答案 1 :(得分:1)
负载均衡器不会破坏会话 - 这取决于您的会话配置和负载均衡器配置/功能。但通常会话应该与负载均衡器一起正常工作。但会话变量 只适用于那个会话。值是特定于会话的,还是真正的全局会话?
如果是后者,我只是将其粘贴在数据库中。甚至为GlobalVariables创建一个新表,只需要名称和值。
这是一个“hacky”解决方案,但它可以正常工作,并且很容易做到。
但是当我重新阅读你的问题时......没关系,我认为你真的不想做你所问的事。您没有理由需要创建“可通过整个rails应用程序访问的变量”来解决该问题。你也不应该需要会话。我会让其他人试着回答你未提出的实际问题。
答案 2 :(得分:0)
title
是一个局部变量。它们只存在于其范围内,即当前块。
@title
是一个实例变量,它可用于类中的所有方法。
您可以在“Struggling With Ruby: Variables”中阅读更多内容。
在Ruby on Rails中,将控制器中的变量声明为@title
等实例变量,使它们可供您查看。