如何声明可在整个Rails应用程序中访问的变量?

时间:2015-09-30 14:47:45

标签: ruby ruby-on-rails-4

我的应用程序取决于变量page_name,但变量page_name中的值仅在提交表单后设置。

我应该使用会话吗?当我搜索时,我发现如果我的应用程序在负载均衡器后面会破坏会话。

在整个Rails应用程序中使变量可访问的更好方法是什么?

创建常量可以解决我的问题,但是在用户填写表单字段中的数据并提交数据之前,不会设置变量中的值。所以基本上,用户负责填充整个应用程序所依赖的变量中的值。

3 个答案:

答案 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等实例变量,使它们可供您查看。