0

我有一个带有start_time时间戳的 Rails 模型,这显然应该在将来,这是我的验证应该确保的。

约会.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

约会控制器.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

这一切都很好,但它过分了。我不能只有一个自定义验证失败并显示消息而不是异常吗?

4

2 回答 2

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
于 2013-10-21T16:21:59.260 回答
1

这是我的错,我觉得自己像个白痴。

我创建了一个名为的类方法.confirm!,它使用.save!了一个 bang。

如果你想要异常,使用 bang 方法,如果你不想要,使用.saveand.create()

于 2013-10-21T16:29:44.637 回答