我有以下模型:

class GuestCatering < ActiveRecord::Base

  # Validation
  validates :name, :presence => true
  validates :order_number, :presence => true
  validates :orderable, :presence => true

end

但是,当我尝试使用以下代码更新现有的GuestCatering时:
guest_catering.update_attributes(:orderable => false)

guest 餐饮变量是有效的GuestCatering对象。
guest_catering对象在更新后出现错误,如下所示:
<{[:orderable, ["can't be blank"]]=>nil}>

但是当我通过orderable => true时,一切都很好,没有错误。

这是怎么了,为什么我不能将orderable设置为false?

最佳答案

通过使用validates :orderable, :presence => true,您的模型实际上表现出与您所说的完全相同的行为

验证 bool(boolean) 值标志的存在几乎没有意义-它将是truenilfalse-在Ruby世界中,当涉及 bool(boolean) 逻辑时,nil和false具有相同的语义值。

在内部,validates :presence依赖于被检查的属性的值,以便在调用false时返回blank?。而且,在Rails(带有ActiveSupport)中,false.blank?的评估结果为true-这意味着您的字段未通过验证。

只需删除该验证,一切将按预期工作。

关于ruby-on-rails - 将 bool 值传递给update_attributes的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5219150/

10-16 09:35