Направляющие: как потребовать, чтобы по крайней мере одно поле не было пробелом

Я знаю, что могу потребовать поля путем добавления validates_presence_of :field к модели. Однако, как я требую, чтобы по крайней мере одно поле было обязательно, не требуя никакого конкретного поля?

заранее спасибо

- Deb

28
задан deb 13 May 2010 в 00:02
поделиться

3 ответа

Вы можете использовать:

validate :any_present?

def any_present?
  if %w(field1 field2 field3).all?{|attr| self[attr].blank?}
    errors.add :base, "Error message"
  end
end

EDIT: обновлено из исходного ответа для Rails 3+ в соответствии с комментарием.

Но вы должны указать имена полей вручную. Вы можете получить все столбцы содержимого модели с помощью Model.content_columns.map (&: name) , но он будет включать ] created_at и updated_at также столбцы, и это, вероятно, не то, что вам нужно.

30
ответ дан 28 November 2019 в 03:15
поделиться

Добавьте метод validate в вашу модель:

def validate
  if field1.blank? and field2.blank? and field3.blank? # ...
    errors.add_to_base("You must fill in at least one field")
  end
end
8
ответ дан 28 November 2019 в 03:15
поделиться

Я считаю, что может сработать что-то вроде следующего

class MyModel < ActiveRecord::Base
   validate do |my_model|
      my_model.my_validation
   end

   def my_validation      
      errors.add_to_base("Your error message") if self.blank? 
      #or self.attributes.blank? - not sure
   end
end
2
ответ дан 28 November 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: