0

start_time私はタイムスタンプ付きのレールモデルを持っています。これは明らかに将来のものである必要があり、これは私の検証が保証するものです。

予定.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

任命_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

そして、それはすべて正常に機能しますが、それは非常にやり過ぎです。例外ではなくメッセージで失敗するカスタム検証を行うことはできませんか?

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 メソッドを使用し、そうでない場合は and を使用.saveします.create()

于 2013-10-21T16:29:44.637 に答える