【问题标题】:How to get Active Admin to store a hash of Boolean key/values in a serialized object?如何让 Active Admin 将布尔键/值的哈希值存储在序列化对象中?
【发布时间】:2019-03-14 20:08:45
【问题描述】:

我曾经将我所有的模型荣誉存储为布尔列,我正试图让它更简洁、更易于管理。这只能由管理员编辑,它只面向用户用于显示目的。

我希望这是一个复选框列表,但我无法从 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,但这是不正确的。将 :accolades 和 ACCOLADES 添加到 admin/user.rb 中的强参数修复了这个问题,它现在按预期更新了

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

【问题讨论】:

    标签: ruby-on-rails serialization activeadmin


    【解决方案1】:

    你可以试试这个吗?

    # 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
    

    【讨论】:

    • 感谢您的回答,但这不是问题所在。这是对文档的误解,并且缺少强大的参数。我会用更多细节更新问题。
    • 如果它具有强大的参数,那么您应该尝试使用更新的代码
    猜你喜欢
    • 2011-04-11
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多