Я знаю, что могу потребовать поля путем добавления validates_presence_of :field
к модели. Однако, как я требую, чтобы по крайней мере одно поле было обязательно, не требуя никакого конкретного поля?
заранее спасибо
- Deb
Вы можете использовать:
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
также столбцы, и это, вероятно, не то, что вам нужно.
Добавьте метод 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
Я считаю, что может сработать что-то вроде следующего
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