2011-03-11 120 views
2

我有一塊控制器代碼,其中一些值被計算。結果是以散列數組的形式。這需要以某種方式進入部分表單,以便在提交期間(即通過「提交」按鈕)進行檢索。Ruby on Rails - 傳遞哈希

問題是我們如何傳遞哈希數組? 謝謝。

+3

你能告訴我們的代碼嗎? – corroded 2011-03-11 10:41:25

+0

根據我的理解,你想通過html表單提交散列數組submit.right ??? – Ashish 2011-03-11 10:58:56

回答

-1

你應該能夠把它作爲一個字符串傳遞給你的部分:當它處於回通過形式

[{}].inspect 

和eval它:

eval("[{}]")) 

但這是真髒...

+0

如果用戶在提交表單前想要修改表單的html,這將使您的應用完全打開以進行攻擊。你真的不能相信要運行的用戶輸入。另外,即使你想採用這種方法,你也必須處理'.inspect'字符串的處理方式,因爲如果它帶有引號或其他字符,它就不會破壞表單。 – 2011-03-11 16:31:13

+0

真的很髒,至於說... ;-) – Yannis 2011-03-11 17:34:36

1

是不是有一個原因它是通過表格?這是我通常使用該會話的類型。

我真的不能想出一個很好的方式來做你所要求的形式。我想你可以用hidden_field_tag作爲替代形式爲你的散列中的每個鍵創建隱藏字段。然後你遇到問題翻譯它(如果一個鍵的值是一個數組或另一個哈希?)。

您可以輕鬆地將散列存儲在會話中,然後在每個頁面加載中檢查是否存在您期望的散列。在計算值:

session[:expected_info] = results 

而且每個頁面加載,這樣的事情:

if session.has_key?(:expected_info) 
    results = session.delete(:expected_info) 
    # you already calculated the results, just grab them and 
    # do what you need to do 
else 
    # you don't have the expected info 
end 
+0

感謝您的回覆。我曾(早些時候)嘗試過基於會話的方法,但我並不滿意,主要是因爲它不是一種可以應用於所有場景的通用解決方案。它確實有限制和依賴性,這是我尋求更多想法的時候。 – user655188 2011-04-04 08:00:13