【问题标题】:Rails: validating locked checkboxRails:验证锁定的复选框
【发布时间】:2015-07-17 00:44:23
【问题描述】:

我的表单中有一个复选框,用于设置布尔值 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,它可能会破坏整个数据库。

我如何验证这一点?

【问题讨论】:

    标签: ruby-on-rails-4


    【解决方案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
    

    这些代码营仍然允许将复选框设置为真 FROM 假,但不能反过来。

    【讨论】:

    • 嗯,做“self[:fracionado] = true”和self.fracionado = true有什么区别?
    • 它们基本相同,但是如果你在frecionado方法内部调用self.fracionado,会导致循环错误。因此,在这种情况下,您可能需要使用self[:fracionado]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多