簡體   English   中英

rails驗證:: allow_nil和:包含兩者同時需要

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM