【发布时间】: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