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

Raa*_*aaz 1 ruby ruby-on-rails-4

我的应用程序依赖于变量,page_name但变量中的值page_name仅在提交表单后设置.

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

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

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

Phi*_*hil 5

您需要将值保留在数据库(使用ActiveRecord)或共享内存缓存服务器中(假设您可以接受该变量,如果它被推出缓存,将会丢失).

您只需在控制器创建操作中设置数据库值,就像任何其他模型一样.

首先,创建模型

rails generate model variable_name variable_value
Run Code Online (Sandbox Code Playgroud)

要从您的def create操作中保存值:

@app_store = AppStore.find_or_initialize_by_name('variable_name')
@app_store.variable_value = secure_params[:variable_value]
@app_store.save
Run Code Online (Sandbox Code Playgroud)

然后从你的应用程序的任何地方检索

@app_store = AppStore.find_by_name('variable_name')
val = @app_store.variable_value
Run Code Online (Sandbox Code Playgroud)

  • 如果您需要持久性,即使服务器出现故障,如果您不使用数据库,则需要将值写入负载均衡器后面所有服务器上共享的文件系统上的文件.由于这是一个rails应用程序,我假设您已经在使用数据库.不是吗?如果是的话,您对使用数据库进行持久性有何顾虑?这是它的目的. (2认同)
  • 您可以从数据库中检索它并将其存储在`ApplicationController`的`before_action`中的实例变量中.然后它将始终在您的控制器中可用. (2认同)