2013-05-14 3 views
0

Чтение с rails guide говорит, что для изменения основного сообщения об ошибке вы можете добавить, какая ваша новая база к массиву ошибок. По каким-то причинам сделать это в результате двух сообщений об ошибках, а один и даже не делать то, что я ожидал, это то, что я в моем кодерельсы формируют базовые сообщения об ошибках

validates :tawme, :start_date, presence: true 
def tawme 
    errors[:base] << "Buyaka!" 
end 

Однако, когда появляется сообщение об ошибке на форме я получаю

The form contains 2 errors 
Buyaka! 
Start date can't be blank 

Я ожидал, что "Start date" будет заменен на "Buyaka!", так как это новая база.

ответ

2

Вы должны удалить: start_date из аргументов методы и добавить вызов if start_date.blank? в методе tawme как это ...

validate :tawme 
def tawme 
    errors[:base] << "Buyaka!" if start_date.blank? 
end 

Примечания снятая «s» в соответствии с методом проверки Rails. validates будет validate.

В вашем коде вы по-прежнему включали validates_presence_of (start_date).

Кроме того, ошибки [: base] - это массив, КОТОРЫЙ ВАМ НЕ ЗАМЕНЯЕТ.

Метод << подталкивает строку к концу массива в хеше errors.

полезного ... http://guides.rubyonrails.org/active_record_validations_callbacks.html#custom-methods

+0

правильно, вы не ЗАМЕНА начала массива с новым пользовательским сообщением :-) – tawheed

+2

Нет вы добавляетесь к нему. Если у вас есть pry, что вам нужно, и вставил перед блоком проверки с вызовом bind.pry, вы можете ввести ошибки в командную строку, возвращая хэш, который имеет массив [: base] и [: start_date]. Вы можете добавить к нему материал. Попробуйте ввести ошибки [: base] << «Привет.». а затем снова отобразится. Затем вы будете иметь рядом с собой «Buyaka» и «Hello there». – ovatsug25

+0

Ruby doc по методу '<<'. http://ruby-doc.org/core-2.0/Array.html#method-i-3C-3C – ovatsug25