轨道,保存管理员要求的一个值的最佳方法



例如,我的Ruby on Rails应用程序中Post模型。我想创建一种方式,让没有代码经验的用户可以为生产上的所有帖子设置到期日期。

我的意思是,例如,帖子是在 21:00 创建的,管理员希望在n小时内使所有帖子过期。然后您向管理员询问n值。(所有帖子的n值都相同)

您不会只为一条记录在 db 中创建新表,对吧?但是您需要一个保存此值的位置。我还有哪些其他选择?

希望我说清楚,谢谢!

有许多选项(包括数据库上的新表),但最适合您的方案的是使用环境变量

环境变量可由管理员轻松更新,并在更新后立即可用于您的应用。


设置环境变量

将此行添加到/.bash_profile(在Mac OS X中)和/etc/environment(在Ubuntu中):

export MY_VARIABLE=VALUE

其中MY_VARIABLE是变量的名称,VALUE是变量的值。

从环境变量中获取值

在 rails 应用程序中的任何位置,您都可以使用ENV["MY_VARIABLE"]访问环境变量,例如:

my_env_variable = ENV["MY_VARIABLE"]

回答其他问题

这个环境变量保存在哪里?

.bash_profile/etc/environment文件。

例如,如何从控制器覆盖它们?

您应该能够通过以下方式更改其值

ENV["MY_VARIABLE"] = new_value

但我建议不要这样做,您将失去使用 env 变量的优势。

它们保存多长时间?

只要它们在.bash_profile/etc/environment文件中保持指定。

部署影响主题?

不。

如何查看环境变量列表?

运行以下命令:

$ printenv

使用常量! 在 Post 模型中,设置一个常量绑定到要锁定到期日期的日期:

class Post # ... EXPIRATION_DATE = Date.new(2017,05,14) # ... end

然后在需要时引用该常量:

Post.create!(expiration_date: Post::EXPIRATION_DATE, # ... )

我认为您的问题包括两部分:

  1. 如何建模并保留某些帖子已过期的事实?

一种简单的方法是将布尔expired列添加到帖子数据库表中,以指示帖子是否已过期。通常使用匹配的expired_atexpired_by列进行审计跟踪。

  1. 如何使过期帖子的操作可供"没有代码体验的用户"使用?

如果您使用的是 rail,则可以将 gem 用于管理视图管理 UI(例如 rails_admin)。然后,您可以添加要仅通过管理 UI 调用的自定义逻辑。另一种选择是将此逻辑公开为自定义 rake 任务,并通过终端(无 GUI)进行调用。

最新更新