Rails自定义验证,不会引发异常

时间:2013-10-21 16:08:56

标签: ruby-on-rails validation ruby-on-rails-4

我有一个带有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

一切正常,但如此超过顶部。我不能仅仅通过消息而不是异常进行自定义验证吗?

2 个答案:

答案 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()