Leo*_*onS 30 ruby activerecord model ruby-on-rails update-attributes
我有以下型号:
class GuestCatering < ActiveRecord::Base
# Validation
validates :name, :presence => true
validates :order_number, :presence => true
validates :orderable, :presence => true
end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用以下代码更新现有的GuestCatering时:
guest_catering.update_attributes(:orderable => false)
Run Code Online (Sandbox Code Playgroud)
来宾餐饮变量是有效的GuestCatering对象.guest_catering对象在更新后有错误,如下所示:
<{[:orderable, ["can't be blank"]]=>nil}>
Run Code Online (Sandbox Code Playgroud)
但是当我通过时orderable => true
,一切都很好,没有错误.
这里有什么问题,为什么我不能设置为虚假的?
Dan*_*ail 43
通过使用你的模型,你的模型实际上就像你告诉它的那样 validates :orderable, :presence => true
验证布尔标志的存在没有什么意义 - 它将会是true
,nil
或者false
- 在Ruby世界中,nil和false在布尔逻辑方面具有相同的语义值.
在内部,validates :presence
依赖于被检查的属性的值,以便false
在blank?
调用时返回.并且,在Rails(使用ActiveSupport)中,false.blank?
评估为true
- 这意味着您的字段未通过验证.
只需删除该验证,一切都将按预期工作.
Raf*_*Raf 21
就像Dan Cheail已经在他的回答中所说的那样,a nil
和false
boolean在语义上是相同的.
但是,如果你真的需要验证它(不允许nil
),你可以随时做:
validates_inclusion_of :orderable, :in => [true, false]
归档时间: |
|
查看次数: |
4838 次 |
最近记录: |