我正在使用 Rails 4.0.0,并且正在尝试将序列化数组正确存储到数据库中,以允许使用StrongParameters gem 的值。也就是说,我有:
# 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 宝石导致这种奇怪的行为吗?
注意:即使数据是“奇怪的”,一切似乎都在我的系统中工作。