2014-01-16 3 views
1

Как я могу применить проверку элементов массива, чтобы он мог вызвать ошибку, чтобы она не могла быть пустой?Проверка массива в рельсах 4

validates :my_arr , presence: true 

Он проверит [" "].present? который будет возвращать true .Но мне нужно проверить его элемент my_arr.last.

я реализовал следующие в моей модели:

if self.dma_area.last.blank? 
    errors.add(:dma_area, "should be selected") 
end 

Я пробовал с большим количеством других вариантов, как (allow_blank: falseexclusion и т.д.), и я нашел выше один работает, но я в сомнении, является ли это стандартом рельсов.

Является ли решение отличным в соответствии со стандартами/соглашениями?

Ожидание хорошего рабочего решения.

ответ

1

Что вы можете сделать, это использовать before_validation перезванивают и отклонить все недопустимые значения из вашего массива. При этом ваша нормальная проверка должна работать нормально.

Вы можете попробовать это нравится:

validates :my_arr , presence: true 

before_validation :reject_invalid_values_from_my_arr 
... 

===================== 
= Protected methods = 
===================== 
protected 
    def reject_invalid_values_from_my_arr 
    self.my_arr = my_arr.compact.reject{|value| value.blank?} 
    end 
... 
2
validates :presence_of_last_element 
... 

private 
... 
def presence_of_last_element 
    unless my_arr.last.present? 
    errors.add(:my_arr, "should not contain empty elements") 
end 
Смежные вопросы