我的申請取決於變量page_name
,但變量page_name
中的值僅在提交表單後設置。如何聲明一個可在整個Rails應用程序中訪問的變量?
我應該使用會話嗎?當我搜索時,我發現如果我的應用程序位於負載均衡器後面,會話將被破壞。
在整個Rails應用程序中創建一個變量是更好的方法嗎?
創建一個常量可以解決我的問題,但只有在用戶填充表單字段中的數據並提交數據之後才能設置變量中的值。所以基本上,用戶有責任填寫我整個應用程序所依賴的變量中的值。
我的申請取決於變量page_name
,但變量page_name
中的值僅在提交表單後設置。如何聲明一個可在整個Rails應用程序中訪問的變量?
我應該使用會話嗎?當我搜索時,我發現如果我的應用程序位於負載均衡器後面,會話將被破壞。
在整個Rails應用程序中創建一個變量是更好的方法嗎?
創建一個常量可以解決我的問題,但只有在用戶填充表單字段中的數據並提交數據之後才能設置變量中的值。所以基本上,用戶有責任填寫我整個應用程序所依賴的變量中的值。
您需要在數據庫(使用ActiveRecord)或共享的Memcache服務器中持久化該值(假設您可以接受將該變量從緩存中移出時將丟失)。
您只需在您的控制器創建操作中設置數據庫值,就像任何其他模型一樣。
首先,創建模型
rails generate model variable_name variable_value
要從def create
行動保存在它的值:
@app_store = AppStore.find_or_initialize_by_name('variable_name')
@app_store.variable_value = secure_params[:variable_value]
@app_store.save
然後從任何地方檢索您的應用
@app_store = AppStore.find_by_name('variable_name')
val = @app_store.variable_value
title
是一個局部變量。它們只存在於當前塊的範圍內。
@title
是一個實例變量,它可用於類中的所有方法。
您可以在「Struggling With Ruby: Variables」中閱讀更多內容。
在Ruby on Rails中,將您的控制器中的變量聲明爲實例變量(如@title
)會使它們可用於您的視圖。
是的,我知道,但我想要一個整個應用程序可訪問的變量,而不僅僅是當前的塊或類。 – Raaz
會議不會被負載平衡器破壞 - 它取決於您的會話配置AN D您的負載均衡器配置/功能。但通常會話應該與負載平衡器一起正常工作。但會話變量是只是可用於..該會話。會話特定的價值,還是真的是跨全球會議?
如果是後者,我只是把它粘在數據庫中。甚至爲GlobalVariables或其他東西創建一個新表,只需要名稱和值。
這是一個「哈克」解決方案,但它可以正常工作,並且很容易做到。
但是,當我重新讀你的問題...沒關係,我不認爲你真的想要做你所問的東西。沒有理由需要創建一個「可通過整個rails應用訪問的變量」來解決這個問題。你也不應該需要會話。我會讓其他人試着回答你沒有問的實際問題。
@HarishVed,請再次閱讀問題。我知道一個常數將通過應用程序來訪問。但是在這裏,直到用戶在表單字段中插入一個值並提交它, – Raaz
「變量中的值纔會被設置,直到用戶在表單字段中插入一個值並提交它爲止」問題?在知道用戶要輸入的內容之前,您無法使用它,因此無法調用需要它的代碼。如果它確實嘗試,那麼聽起來像你的代碼有真正的問題。一旦提交,你可以*設置一個全局變量並使用它,但全局變量是主要的代碼氣味,除非你知道爲什麼你應該使用它們。使用數據庫或實例變量。就目前來看,這個問題還沒有很好的界定。 –