2017-05-14 13 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)調用。