例如,我的Ruby on Rails应用程序中有Post
模型。我想创建一种无代码经验的用户可以为生产中的所有帖子设置到期日期的方式。Rails,保存一个值的最佳方式从管理员处询问
我的意思是,例如,Post创建于21:00,管理员希望在n
小时内过期。你可以从管理员那里询问价值。 (并且所有帖子的n
值都是一样的)
你不会在你的db中为一条记录创建一个新表,对吧?但是你需要一个地方来保存这个值。我还有什么其他选择?
希望我让自己清楚,谢谢!
例如,我的Ruby on Rails应用程序中有Post
模型。我想创建一种无代码经验的用户可以为生产中的所有帖子设置到期日期的方式。Rails,保存一个值的最佳方式从管理员处询问
我的意思是,例如,Post创建于21:00,管理员希望在n
小时内过期。你可以从管理员那里询问价值。 (并且所有帖子的n
值都是一样的)
你不会在你的db中为一条记录创建一个新表,对吧?但是你需要一个地方来保存这个值。我还有什么其他选择?
希望我让自己清楚,谢谢!
有许多选项(包括您的数据库中的新表),但最适合您的方案的选项是使用环境变量。
一个环境变量可以很容易地由管理员进行更新,并且在更新后立即可用。
设置环境变量
添加此行/.bash_profile
(在Mac OS X)和/etc/environment
(在Ubuntu):
export MY_VARIABLE=VALUE
哪里MY_VARIABLE
是你的变量的名称和VALUE
是它的价值。从环境变量
任何地方在你的轨道
获取值应用程式,您可以用ENV["MY_VARIABLE"]
访问环境变量,例如:
my_env_variable = ENV["MY_VARIABLE"]
回答其他问题
这个env vars被保存在哪里?
.bash_profile
和/etc/environment
文件。
如何从控制器中覆盖它们?
你应该能够
ENV["MY_VARIABLE"] = new_value
改变它的价值,但我建议不要它,你将失去使用ENV变量的优势。
它们保存多久?
只要他们仍然在.bash_profile
和/etc/environment
文件中指定。
部署影响主题?
号
如何查看ENV列表瓦尔?
运行以下命令:
$ printenv
使用常量!在发布模型,设置固定绑定到您希望锁定到期日期:
class Post # ... EXPIRATION_DATE = Date.new(2017,05,14) # ... end
然后引用该常量需要的地方:
Post.create!(expiration_date: Post::EXPIRATION_DATE, # ...)
我认为你的问题包括两个部分:
一个简单的方法是将一个布尔型expired
列添加到posts数据库表中以指示帖子是否已过期。通常匹配expired_at
和expired_by
列用于审计跟踪。
如果您使用的是导轨,则可以使用gem作为管理视图管理UI(例如rails_admin)。然后,您可以添加自定义逻辑,仅通过管理用户界面调用。另一种选择是将此逻辑公开为custom rake task,并通过终端(无GUI)调用。
可能重复的[坚持一个单一的变量在轨道](http://stackoverflow.com/questions/23235604/persist-a-single-variable-in-rails) – Janosch