2012-12-09 41 views
0

我認爲Rails正在將我的散列字面解釋爲嵌套屬性。我實際上只是想將散列轉換爲一個字符串。它不是與某個模型相關的嵌套屬性,也不應該與模型相關。在這裏,嵌套值僅僅是一種簡單的方式,可以在沒有太多忙碌的情況下通過表單傳遞數據。保存哈希文字(告訴Rails不要將哈希解釋爲嵌套屬性)?

:PARAMS是

{"utf8"=>"✓", 
"authenticity_token"=>"[deleted for SO]", 
"scorecard"=>{"1"=>"2", 
"2"=>"2", 
"3"=>"2", 
"4"=>"2", 
"5"=>"2", 
"6"=>"2", 
"7"=>"2", 
"8"=>"2", 
"9"=>"2", 
"10"=>"2", 
"11"=>"2", 
"12"=>"2"}}, 
"commit"=>"Create Assessment"} 

..但是當我這樣做:

assessment = Assessment.new(params[:assessment]) 
... 
@assessment.save 

...我得到:

unknown attribute: scorecard 

有趣的是,當

attr_accessible :scorecards 

..是在模型中(注意複數形式),我得到:

Can't mass-assign protected attributes: scorecard 

因爲當attr_accessible是我真正想要的(:記分卡),我得到「未知屬性:記分卡」,似乎認爲Rails的它處理一個嵌套的屬性。

我可以告訴Rails不要把:記分卡作爲嵌套屬性嗎?

謝謝。

回答

1

您的意思是忽略了的' attr_accessible?

attr_accessible :scorecard(s) 

編輯

你很多意識到了這個問題下一個錯誤,因爲你在你的桌子

unknown attribute: scorecard 
+0

另外,要將散列存儲爲字符串,請在您的模型中聲明'serialize:scorecard'。 – bitstrider

+0

是的,我的意思是把它排除在外。這會導致「無法批量簽名受保護的屬性:記分卡」(沒有'')。然後,在網頁上的參數名稱中添加's'將需要attr_accessible被記錄下來,最後有兩個s。 在模型中做「序列化:記分卡」似乎沒有做到這一點(即使我期待它);我仍然得到'未知屬性:記分卡'。 – Zach

+0

s /導致/在attr_accessible中添加's'導致 – Zach

1

你能後的表的列名失蹤scorecard列?看起來你錯過了'記分卡'這個專欄。或者你把它命名爲'記分卡'?以防萬一。

此外,你必須聲明序列化:記分卡來保存序列化的值。將它另存爲JSON也是一種選擇。只需要額外的解析。