如何使Active Admin在序列化的对象中存储布尔键/值的哈希?

时间:2018-10-10 01:19:48

标签: ruby-on-rails serialization activeadmin

我曾经把我所有的模型赞誉都存储为布尔型列,并且我试图使其更加整洁和易于管理。此操作只能由管理员进行编辑,仅供显示之用。

我希望这是复选框列表,但是我无法从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

这将按预期显示复选框列表,但是会创建错误的名称和ID的“层”

<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>

如何获取更新序列化哈希值的复选框列表? 谢谢!

编辑:

原来是两件事。在我们之间,另一位开发人员和我误读了Store文档,并正在对其内部工作进行不同的假设。

因此,我试图创建要发送和存储在.accolades中的哈希,但这是不正确的。在admin / user.rb中的强参数中添加:accolades和ACCOLADES可以解决此问题,现在可以按预期使用

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

1 个答案:

答案 0 :(得分:0)

您可以尝试吗?

# 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