сохранить хэш в базе данных в ruby ​​на рельсах - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь сохранить хэш в своей базе данных, но это не работает

это моя таблица в моей базе данных

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 Ответ

2 голосов
/ 26 апреля 2019

.permit(:color) не работает, поскольку хеш не считается разрешенным скалярным типом .

Допустимые скалярные типы: String, Symbol, NilClass, Numeric, TrueClass, FalseClass, Дата, Время, 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: {})

См:

...