我在我的帐户模型中保存了一个哈希值,用于根据用户偏好存储它们的设置。
<%= form_with(model: account, local: true, html: { multipart: true }) do |f| %>
<div class="form-group">
<% @account.settings.each do |key, val| %>
<%= f.label :allow_teachers_to_create_maps?, class: 'control-label' %>
<%= check_box_tag "account[settings][#{key}]", value = val, checked = val %>
<% end %>
</div>
<%= f.submit class: 'btn btn-primary' %>
<% end %>
到目前为止,我的帐户数据库中唯一的“设置”是以下哈希值:{:can_create=>false}
它将填充复选框,设置数据库值的值,如果该值为true,则将其标记为选中。但是,它不会在数据库中更新。
以防万一有人要求模型:
class Account < ApplicationRecord
serialize :settings
end
如果我选中此框,该表单将保存,并且服务器日志中的任何位置都没有可见的错误。有人知道为什么会这样吗?
我确实在日志中的某个地方看到了此错误,但是在页面加载或表单保存时并没有产生该错误。
ActionView::Template::Error (undefined method `merge' for false:FalseClass):
15: <div class="form-group">
16: <% @account.settings.each do |key, val| %>
17: <%= f.label :allow_teachers_to_create_maps?, class: 'control-label' %>
18: <%= f.check_box "account[settings][#{key}]", value = val, checked = val %>
19: <% end %>
20: </div>
21: <%= f.submit class: 'btn btn-primary' %>
check_box_tag
中删除了整个值之后发现问题仍然存在。