2012-05-05 59 views
0

我有一個觀察員在記錄(預訂)狀態發生變化時創建一些記錄(票證)。運行應用程序時,它可以正常工作。但不會在遷移期間或在軌道控制檯中運行。而對於我能理解,它應該觀察者未運行

這是application.rb中

# Activate observers that should always be running. 
config.active_record.observers = :booking_observer 

繼承人的觀察者(booking_observer.rb)

編碼:UTF-8

class BookingObserver < ActiveRecord::Observer 
    require 'logger' 

    def create_ticket(booking, passenger, leg) 
    ticket = Ticket.factory(booking, passenger, leg) 
    begin 
     ticket.save! 
    rescue Exception => e 
     booking.logger.error "Can't save #{leg} ticket: #{e}" 
    end 
    end 

    def after_update(booking) 
    if booking.changed? && booking.changed_attributes()["status"]!=Booking::CONFIRMED && booking.status==Booking::CONFIRMED.to_sym 
     passengers = booking.passengers.all 
     passengers.each do |passenger| 
     booking.logger.error "Passenger: #{passenger}" 
     create_ticket(booking, passenger, Booking::DEPARTURE_LEG) 
     create_ticket(booking, passenger, Booking::RETURN_LEG) if booking.booking_type.to_sym != :ow 
     end 
    end 
    end 
end 

這裏的樣品遷移

class CreateTicketsForValidBookings < ActiveRecord::Migration 
    def up 
    bookings = Booking.where("departure_date < ?", 1.minute.ago).where(status: "confirmed") 
    bookings.each do |booking| 
     booking.status="migrating" 
     booking.save 
     booking.status="confirmed" 
     booking.save 
    end 
    end 

    def down 
    bookings = Booking.where("departure_date < ?", 1.minute.ago).where(status: "migrating") 
    bookings.each do |booking| 
     booking.status="confirmed" 
     booking.save 
    end 
    end 
end 

在我發現的每一篇文章中,人們都試圖禁用觀察者。那麼,在我的情況下,它是倒退

回答

1

原來,你必須在每個環境的基礎上啓用觀察員。這三個文件

config/enviroments/development.rb 
config/enviroments/test.rb 
config/enviroments/production.rb 

必須激活應始終運行觀察員。

config.active_record.observers = :booking_observer