簡體   English   中英

Rails 3 驗證:存在 => 假

[英]Rails 3 Validation :presence => false

我希望這是一個非常簡單的問題,但我無法在指南或其他地方找到明確的答案。

我在 ActiveRecord 上有兩個屬性。我希望只有一個存在,另一個為 nil 或空字符串。

我該怎么做相當於:presence => false? 我想確保該值為零。

validates :first_attribute, :presence => true, :if => "second_attribute.blank?"
validates :second_attribute, :presence => true, :if => "first_attribute.blank?"
# The two lines below fail because 'false' is an invalid option
validates :first_attribute, :presence => false, :if => "!second_attribute.blank?"
validates :second_attribute, :presence => false, :if => "!first_attribute.blank?"

或者也許有更優雅的方法來做到這一點......

我正在運行 Rails 3.0.9

要允許 object 當且僅當特定屬性為 nil 時才有效,您可以使用“包含”而不是創建自己的方法。

validates :name, inclusion: { in: [nil] }

這是針對 Rails 3 的。Rails 4 的解決方案要優雅得多:

validates :name, absence: true
class NoPresenceValidator < ActiveModel::EachValidator                                                                                                                                                         
  def validate_each(record, attribute, value)                                   
    record.errors[attribute] << (options[:message] || 'must be blank') unless record.send(attribute).blank?
  end                                                                           
end    

validates :first_attribute, :presence => true, :if => "second_attribute.blank?"
validates :second_attribute, :presence => true, :if => "first_attribute.blank?"

validates :first_attribute, :no_presence => true, :if => "!second_attribute.blank?"
validates :second_attribute, :no_presence => true, :if => "!first_attribute.blank?"

使用自定義驗證。

validate :validate_method

# validate if which one required other should be blank
def validate_method
  errors.add(:field, :blank) if condition
end

它看起來像:length => {:is => 0 } 可以滿足我的需要。

validates :first_attribute, :length => {:is => 0 }, :unless => "second_attribute.blank?"

嘗試:

validates :first_attribute, :presence => {:if => second_attribute.blank?}
validates :second_attribute, :presence => {:if => (first_attribute.blank? && second_attribute.blank? )}

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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