将哈希保存在Rails中的ruby中的数据库中

时间:2019-04-26 00:09:49

标签: ruby-on-rails ruby-on-rails-4

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

这是我数据库中的表

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)

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

1 个答案:

答案 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: {})

请参阅: