2017-05-14 15 views
1

例如,我的Ruby on Rails应用程序中有Post模型。我想创建一种无代码经验的用户可以为生产中的所有帖子设置到期日期的方式。Rails,保存一个值的最佳方式从管理员处询问

我的意思是,例如,Post创建于21:00,管理员希望在n小时内过期。你可以从管理员那里询问价值。 (并且所有帖子的n值都是一样的)

你不会在你的db中为一条记录创建一个新表,对吧?但是你需要一个地方来保存这个值。我还有什么其他选择?

希望我让自己清楚,谢谢!

+0

可能重复的[坚持一个单一的变量在轨道](http://stackoverflow.com/questions/23235604/persist-a-single-variable-in-rails) – Janosch

回答

1

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

一个环境变量可以很容易地由管理员进行更新,并且在更新后立即可用。


设置环境变量

添加此行/.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 
+0

我认为这是一个更好的主意,以锁定到期日期内的类常量,以便更改可以通过作者和日期通过源代码控制引用。 – Dan

+0

@Dan这是我的第一个选择(一个很好的选择),但如果值经常变化(它认为它会),那么环境变量更方便(您不需要更改代码,部署和重新启动应用程序) 。如果价值总是保持不变,那么常数肯定会更好。 – Gerry

+0

Env variable ='config/secrets.yml'文件?以及如何通过更新它,例如提交表单? –

0

使用常量!在发布模型,设置固定绑定到您希望锁定到期日期:

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

然后引用该常量需要的地方:

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

0

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

  1. 如何建模并坚持一些帖子已过期的事实?

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

  1. 如何使一个“没有代码体验的用户”的过期帖子操作可用?

如果您使用的是导轨,则可以使用gem作为管理视图管理UI(例如rails_admin)。然后,您可以添加自定义逻辑,仅通过管理用户界面调用。另一种选择是将此逻辑公开为custom rake task,并通过终端(无GUI)调用。