我有一个带有start_time
时间戳的rails模型,显然应该在将来使用,这是我的验证应该确保的。
appointment.rb
validate :start_time_in_future, :on => :create
private
def start_time_in_future
errors.add(:base, 'Start time must be in the future') unless self.start_time > Time.now
end
appointments_controller.rb
around_filter :start_time_in_future
def create
@appointment = Appointment.create(foo_params)
redirect_to @appointment
end
private
def start_time_in_future
begin
yield
rescue ActiveRecord::RecordInvalid => e
redirect_to request.referrer, :alert => e.message
end
end
一切正常,但如此超过顶部。我不能仅仅通过消息而不是异常进行自定义验证吗?
答案 0 :(得分:1)
我认为您可以通过更改此类create
方法来实现这一目标
def create
@appointment = Appointment.new(foo_params)
if @appointment.save
redirect_to @appointment
else
render "new"
end
end
在您的new
模板中,只需通过@appointment
这样的对象检索错误消息
@appointment.errors.full_messages
答案 1 :(得分:1)
这是我的错,我觉得自己像个白痴。
我创建了一个名为.confirm!
的类方法,该方法使用.save!
进行爆炸。
如果您需要例外,请使用爆炸方法,否则请使用.save
和.create()