我正在尝试在数据库中保存哈希,但这不起作用
这是我数据库中的表
create_table "categories", force: :cascade do |t|
t.string "name", limit: 255
t.integer "client_id", limit: 4
t.integer "event_id", limit: 4
t.text "color", limit: 65535
end
在我的模型中尝试使用serialize
class Category < ActiveRecord::Base
serialize :color, Hash
end
在我的控制器中:
def category_params
params.require(:category).permit(:name, :color, :event_id)
end
当我尝试保存它时,我会在控制台中看到它:
Parameters: {"category"=>{"event_id"=>"2", "name"=>"dwdqwd", "color"=>{"color"=>"#ad1d1d", "opacity"=>1}}}
Unpermitted parameter: color
SQL (0.4ms) INSERT INTO `categories` (`name`, `event_id`) VALUES ('dwdqwd', 2)
如何将哈希保存在数据库中?
答案 0 :(得分:2)
.permit(:color)
不起作用,因为哈希不被视为permitted scalar type。
允许的标量类型为字符串,符号,NilClass,数字, TrueClass,FalseClass,Date,Time,DateTime,StringIO,IO, ActionDispatch :: Http :: UploadedFile和Rack :: Test :: UploadedFile。
您可以通过传递一组允许的键将嵌套参数的哈希表列入白名单:
params.require(:category)
.permit(:name, :event_id, color: [:color, :opacity])
要允许任何键,请使用空散列:
params.require(:category)
.permit(:name, :event_id, color: {})
请参阅: