Rails:验证锁定的复选框

时间:2015-07-17 00:44:24

标签: ruby-on-rails-4

我的形式是一个设置布尔值为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,它可能会破坏整个数据库。

我该如何验证?

1 个答案:

答案 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,而不是相反。