레일 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 젬입니까?
참고 : 데이터가 "이상한"경우에도 모두 내 시스템에서 작동하는 것처럼 보입니다.
레일과 관련된 문제는 질문 작성자가 작성합니다. https://github.com/rails/rails/issues/12557 –