我有以下模型:
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) 值标志的存在几乎没有意义-它将是true
,nil
或false
-在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/