![](/img/trans.png)
[英]Rails 4 Validation: where to put the allow_nil when doing an inclusion?
[英]rails validation: :allow_nil and :inclusion both needed at the same time
通常,字段'kind'應該是空白的。 但如果它不是空白,則該值應包含在['a','b']中
validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
代碼不起作用?
此語法將在允許nils的同時執行包含驗證:
validates :kind, :inclusion => { :in => ['a', 'b'] }, :allow_nil => true
在Rails 5中,您可以使用allow_blank: true
包含塊外部或內部:
validates :kind, inclusion: { in: ['a', 'b'], allow_blank: true }
要么
validates :kind, inclusion: { in: ['a', 'b'] }, allow_blank: true
提示:您可以in: %w(ab)
使用文本值
另請注意:allow_blank => true
如果您嘗試在belongs_to
關聯中的Rails 5中實現此目的,請考慮默認行為要求值存在。
要退出此行為,您必須指定optional
標志:
belongs_to :foo, optional: true
validates :foo, inclusion: { in: ['foo', 'bar'], allow_blank: true }
在Rails 5.x中,除了以下行之外,還需要調用before_validation
方法:
validates_inclusion_of :kind, :in => ['a', 'b'], :allow_nil => true
需要使用before_validation
將提交的空白值轉換為nil
,否則''
不會被視為nil
,如下所示:
before_validation(on: [:create, :update]) do
self.kind = nil if self.kind == ''
end
對於數據庫磁盤空間使用,當然最好存儲nil
不是將空值存儲為空字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.