Comment valider la présence d'un champ ou d'un autre mais pas les deux et au moins un?
Réponses
Trop de publicités?Votre code fonctionnera si vous ajoutez des conditions aux validations de numéricité, comme ceci:
class Transaction < ActiveRecord::Base
validates_presence_of :date
validates_presence_of :name
validates_numericality_of :charge, allow_nil: true
validates_numericality_of :payment, allow_nil: true
validate :charge_xor_payment
private
def charge_xor_payment
if !(charge.blank? ^ payment.blank?)
errors.add(:base, "Specify a charge or a payment, not both")
end
end
end
jmanrubia
Points
515
Kieran Andrews
Points
3002
class Transaction < ActiveRecord::Base
validates_presence_of :date
validates_presence_of :name
validates_numericality_of :charge, allow_nil: true
validates_numericality_of :payment, allow_nil: true
validate :charge_xor_payment
private
def charge_xor_payment
if [charge, payment].compact.count =! 1
errors.add(:base, "Specify a charge or a payment, not both")
end
end
end
Vous pouvez même le faire avec 3 valeurs:
if [month_day, week_day, hour].compact.count =! 1
Seoman
Points
162
Exemple pour les rails 3.
class Transaction < ActiveRecord::Base
validates_presence_of :date
validates_presence_of :name
validates_numericality_of :charge, :unless => proc{|obj| obj.charge.blank?}
validates_numericality_of :payment, :unless => proc{|obj| obj.payment.blank?}
validate :charge_xor_payment
private
def charge_xor_payment
if !(charge.blank? ^ payment.blank?)
errors[:base] << "Specify a charge or a payment, not both"
end
end
end
chaitanya saraf
Points
391
validate :father_or_mother
# Le nom de famille du père ou le nom de famille de la mère est obligatoire
def father_or_mother
if father_last_name == "Last Name" or father_last_name.blank?
errors.add(:father_last_name, "cant blank")
errors.add(:mother_last_name, "cant blank")
end
end
Essayez ci-dessus exemple simple.