例如,我的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, # ... )
我认为您的问题包括两部分:
- 如何建模并保留某些帖子已过期的事实?
一种简单的方法是将布尔expired
列添加到帖子数据库表中,以指示帖子是否已过期。通常使用匹配的expired_at
和expired_by
列进行审计跟踪。
- 如何使过期帖子的操作可供"没有代码体验的用户"使用?
如果您使用的是 rail,则可以将 gem 用于管理视图管理 UI(例如 rails_admin)。然后,您可以添加要仅通过管理 UI 调用的自定义逻辑。另一种选择是将此逻辑公开为自定义 rake 任务,并通过终端(无 GUI)进行调用。