I am trying to figure out how to skip checks for a specific instance of an ActiveRecord when my backup model goes to a state machine using the rake command. I would like to skip all the checks whenever booking.close! called. Hope to call something like reserve.close! (: Validate => false). FYI we use https://github.com/pluginaweek/state_machine for the state machine.
Here is an example of my booking model.
class Reservation < ActiveRecord::Base validates :ride_id, :start_at, :end_at, presence: true validate :proper_custom_price?, allow_nil: true, on: :update validate :dates_valid? validate :dates_make_sense? scope :needs_close_transition, lambda { where("end_at < ?", Time.now).where("state" => ["requested", "negotiating", "approved"]) } state_machine :initial => 'requested' do all_prebooked = ["requested", "negotiating", "approved"] event :close do transition :from => all_prebooked, :to => "precanceled" end before_transition :on => [:close] do |reservation| reservation.cancel_reason = :admin end end end
Here is an example of my rake task.
namespace :reservation do task :close => :environment do puts "== close" Reservation.needs_close_transition.each do |reservation| puts "===> #{reservation.id}" begin reservation.close!(:validate => false) rescue Exception => e Airbrake.notify(e, error_message: e.message) if defined?(Airbrake) end end end
source share