在rails上的ruby中保存数据库中的哈希值

问题描述 投票:0回答:1

我正在尝试在我的数据库中保存哈希,但这不起作用

这是我数据库中的表

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)

如何在我的数据库中保存哈希?

ruby-on-rails ruby-on-rails-4
1个回答
2
投票

.permit(:color)不起作用,因为哈希不被认为是permitted scalar type

允许的标量类型是String,Symbol,NilClass,Numeric,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: {})

看到:

© www.soinside.com 2019 - 2024. All rights reserved.