我正在使用Rails 4.0.0,我試圖正確地存儲一個序列化數組到數據庫允許值與StrongParameters寶石。也就是說,我有:如何允許正確存儲序列化數組?
# Model class
class Article < ActiveRecord::Base
serialize :links, Array
...
end
# Controller class
class ArticlesController < ApplicationController
...
def update
...
@article.update_attributes(article_params)
...
end
private
def article_params
params.require(:article).permit(<PERMITTED_PARAMETERS>) # Keep reading for more information.
end
end
從視圖提交的參數是:
"links"=>{"0"=>{"name"=>"Web Site Name 0", "url"=>"www.website0.com"}, "1"=>{"name"=>"Web Site Name 1", "url"=>"www.website1.com"}, "2"=>{"name"=>"Web Site Name 2", "url"=>"www.website2.com"}, "3"=>{"name"=>"", "url"=>""}, "4"=>{"name"=>"", "url"=>""}, "5"=>{"name"=>"", "url"=>""}}}
在上面的代碼,以代替<PERMITTED_PARAMETERS>
我試圖把把以下內容:
:links => [:name, :url]
[:links => [:name, :url]]
{:links => [:name, :url]}
[{:links => [:name, :url]}]
在上述所有情況下,StrongParameters允許正確的值而不會引起錯誤,但是在我的數據庫中總是存儲以下序列化數據:
---
- !ruby/hash:ActionController::Parameters
name: Web Site Name 0
url: www.website0.com
- !ruby/hash:ActionController::Parameters
name: Web Site Name 1
url: www.website1.com
- !ruby/hash:ActionController::Parameters
name: Web Site Name 3
url: www.website2.com
什麼!ruby/hash:ActionController::Parameters
是什麼意思?這是對的嗎?如果不是,我如何以正確的方式存儲數據?這是否是導致這種奇怪行爲的StrongParameters寶石?
注意:即使數據是「奇怪」,所有似乎在我的系統中工作。
Rails問題與此問題相關,並由問題提問者創建:https://github.com/rails/rails/issues/12557 –