2012-05-05 61 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