Рельсы атрибутов нескольких столбцов

117
9

Учитывая составной виртуальный атрибут в модели Rails 3.0.3, как могут автоматически помещаться ошибки в атрибутах компонентов в составном атрибуте? Например:


validates_presence_of :first_name
validates_presence_of :last_name

def name
"#{first_name} #{last_name}"
end

def name=(name)
first_name, last_name = name.split
end


дает:


@model.errors[:name] = @model.errors[:first_name] + @model.errors[:last_name]


Обратите внимание, что это упрощенный пример, и я не могу легко перенести проверки из атрибутов компонента в новый метод проверки для составного атрибута.


Другим примером является камень Paperclip, в котором проверки на размер (attachment_size) помещаются в атрибут "вложение". Любые идеи?


Спасибо.

спросил(а) 2021-01-25T18:30:11+03:00 5 месяцев назад
1
Решение
118

Лично у меня не было бы "обычных" валидаций в полях first_name и last_name. Вместо этого я оставил бы его в умелых руках пользовательского валидатора:

validate :name_is_valid

def name_is_valid
if first_name.blank? || last_name.blank?
errors.add(:name, "You must specify both your first and last name")
end
end

ответил(а) 2021-01-25T18:30:11+03:00 5 месяцев назад
45

Закончено:

after_validation do

self.errors[:first_name].each do |message|
self.errors.add(:name, message)
end

self.errors[:last_name].each do |message|
self.errors.add(:name, message)
end

self.errors.delete(:first_name)
self.errors.delete(:last_name)

end

ответил(а) 2021-01-25T18:30:11+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема