Как заставить Active Admin хранить хеш булевых ключей / значений в сериализованном объекте? - PullRequest
0 голосов
/ 10 октября 2018

Раньше все мои похвалы моделей хранились в виде логических столбцов, и я пытаюсь сделать их немного чище и более управляемыми.Это будет редактироваться только администраторами. Это только пользовательский интерфейс для отображения.

Я хотел бы, чтобы это был список флажков, но у меня возникают проблемы при обновлении их из ActiveAdmin.

models / user.rb

class User < ActiveRecord::Base

  ACCOLADES = :great_guy, :smashing_haircut, :trimmed_nails,
              :fresh_breath, :nice_shoes
  serialize :accolades, Hash
  store_accessor :accolades, User::ACCOLADES

admin / user.rb

ActiveAdmin.register User do

  menu parent: "User Information"

   ...

  form do |f|
    f.inputs "Basics" do
      f.input :name
      f.input :website
      f.input :email
    end
...
    f.inputs "Accolades" do
      User::ACCOLADES.each do |accolade|
        f.input accolade, as: :boolean, checked_value: 'true', unchecked_value: 'false'
      end
    end
  end

Это отображает список флажков, как и ожидалось, но создает неправильный «слой» имени идентификаторы

<li class="boolean input optional" id="user_great_guy_input"> 
  <input type="hidden" name="user[great_guy]" value="false"> 
  <label for="user_great_guy" class=""><input type="checkbox" name="user[great_guy]" id="user_great_guy" value="true">Great Guy</label>
</li>

Как получить список флажков, которые обновляют сериализованный хэш?Спасибо!

РЕДАКТИРОВАТЬ:

Оказывается, это была пара вещей.Между нами, другой разработчик и я неправильно прочитали документы Магазина и работали над другим предположением о его внутренней работе.

При этом я пытался создать хеш для отправки и сохранения в .accolades, но это было неверно.Добавление: похвалы и АККОЛАДЫ к сильным параметрам в admin / user.rb исправили эту проблему, и теперь она обновляется, как и ожидалось, с

f.inputs :accolades do
  f.input :great_guy, as: :boolean, checked_value: 'true', unchecked_value: 'false'
    ...
end

1 Ответ

0 голосов
/ 10 октября 2018

Можете ли вы попробовать это?

# STRONG PARAMS
permit_params do
  permitted = %i[one_param another_param]
  permitted << User::ACCOLADES
  permitted
end

# INPUT IN THE FORM
f.inputs "Accolades" do
  User::ACCOLADES.each do |accolade|
    f.input accolade, as: :boolean do
      f.check_box accolade, {}, "true", "false"
    end
  end
end
...