У меня есть поле даты, которое не является обязательным. Я использую Chronic для форматирования строки ввода пользователя в действительный формат рельсов для поля даты. Если Chronic не может выполнить синтаксический анализ даты, я хотел бы поднять ошибку, отображая представление редактирования с соответствующим сообщением об ошибке и исходным значением ввода. В настоящее время обновление выполнено успешно, если введена неверная дата, но ничего не обновляется для поля service_date.Как добавить сообщение об ошибке при использовании виртуального атрибута
new.html.erb
<%= f.text_field :service_date_text %>
bill.rb
require 'chronic'
class Bill < ActiveRecord::Base
def service_date_text
service_date.try(:strftime, "%m/%d/%Y")
end
def service_date_text=(date)
if date.present?
if Chronic.parse(date)
self.service_date = Chronic.parse(date)
else
self.errors.add(:service_date_text, "invalid date format hello.")
end
else
self.service_date = ''
end
end
end
bills_controller.rb
def update
@bill = current_account.bills.find(params[:id])
if @bill.update_attributes(bill_params)
redirect_to @bill, notice: 'Bill has been successfully updated.'
else
render :edit
end
end
private
def bill_params
params.require(:bill).permit(:description, :notes, :po_number, :service_date_text)
end
Вы просматривали пользовательские валидаторы в ActiveRecord? http://guides.rubyonrails.org/active_record_validations.html#custom-validators – davidkovsky