validationrails中是否存在多个属性之一

在多语言应用程序中,用户可以输入他们的中文和英文名称。 用户可以输入其中一个或两个,但必须至少输入一个名称。

class Person  true validates :en_name, :presence => true validates :fr_name, :presence => true end 

由于内置:validates_presence_of方法只能同时validation两个属性,有没有办法validationrails中至少有一个属性的存在?

像一个神奇的, validates_one_of :zh_name, :en_name, :fr_name

先感谢您,

 validate :at_least_one_name def at_least_one_name if [self.zh_name, self.en_name, self.fr_name].reject(&:blank?).size == 0 errors[:base] << ("Please choose at least one name - any language will do.") end end 

将@ micapam的答案更进一步,我可以建议:

 validate :has_a_name def has_a_name unless [zh_name?, en_name?, fr_name?].include?(true) errors.add :base, 'You need at least one name in some language!' end end 

只需快速拍摄,您可以将“if”或“unless”传递给validation器,也许您可​​以通过这种方式使用它。 我有这样的想法

 validates :zh_name, :presence => { :if => (fr_name.blank? && en_name.blank?) } 
 validate :has_a_name def has_a_name unless [zh_name, en_name, fr_name].any?{|val| val.present? } errors.add :base, 'You need at least one name in some language!' end end 

马克斯威廉姆斯的答案很好,但我没有看到有必要计算点击数何时? 返回一个布尔值。