2011-01-21 85 views
3

serialize方法允許像哈希這樣的對象作爲YAML字符串存儲在數據庫中。然而,我最近發現自己希望有一個文本字段允許用戶輸入他們自己的字符串,並讓控制器創建一個與該字符串相關的散列。從文本字段中檢索YAML

<%= f.text_field :yaml, :value => '--- \nlast_name: Smith\nfirst_name: Joe\n' %> 

是的,我想要單引號:我想在顯示中保留\ n。但問題是,作爲一個結果,結果字符串對象被轉義:

--- \\nlast_name: Smith\\nfirst_name: Joe\\n 

我運行通過兩個正則表達式的字符串:第一個替換一個反斜槓的雙反斜線。然後接下來將\ n(兩個字符)轉換爲\ n(特殊單個字符)。

所以在我的控制器:

yhash = YAML.load(params[:form][:yaml].gsub(/\\\\/, "\\").gsub(/\\n/, "\n")) 

現在這工作,但似乎非常令人費解。有沒有更優雅的方式讓用戶提交yaml?

+0

你能更簡潔地重述嗎? – 2011-01-21 21:07:39

回答

0

你是說你想讓用戶能夠寫\n來標記他們正在進入的yaml中的換行符嗎?因爲在這種情況下,你現在用正則表達式的方式非常簡單。

轉義序列\n是Ruby字符串的一個特性。如果你想在你的web形式yaml接口中實現它,正則表達式是一種有效的方法。

你確定你必須做雙斜槓替換嗎?我認爲它應該只顯示爲雙斜線,如果你這樣做.inspect