我的形式是一个设置布尔值为true或false的复选框(默认值=> false)
我修改了所有内容以便用户随时编辑表单,但是,如果有人将复选框标记一次,则永远无法撤消。
我有一个部分解决方案阻止复选框,我这样做:
<div class="field">
<%= f.label :split, "Item split " %><br>
<% if ! f.object.split or @item.new_record? %>
<%= f.check_box :split %>
<% else %>
<%= f.check_box :split, :disabled => true %>
<% end %>
</div>
这很好用,但我觉得我真的应该验证这个东西,因为如果有什么东西将这个值从true设置为false,它可能会破坏整个数据库。
我该如何验证?
答案 0 :(得分:1)
如果将值从true更改为false将破坏整个数据库,那么您不应该允许它甚至到达数据库。
将此代码添加到item.rb
模型中:
def split=(boolean)
if self.split
self[:split] = true
else
self[:split] = boolean
end
end
您甚至可以在控制器到达模型之前进行验证。为此,请在保存之前将其添加到控制器的更新操作中:
def update
# This line will ensure that :split stays true if it was true before
params[:item][:split] = true if @item.split
# ... other original code
end
这些代码示例仍然允许将复选框设置为true,而不是相反。