我试图运行一个迁移文件,但是当它运行时,我得到一个
undefined class/module BookingLib::/......./db/migrate/20141216090123_migrate_old_advanced_price_data.rb:18:in `block in up'迁移文件:
def up
add_column :advanced_prices, :seller_id, :integer
add_column :advanced_prices, :buyer_id, :integer
add_column :advanced_prices, :seller_type, :string
add_column :advanced_prices, :buyer_type, :string
Shipment.all.each do |shipment|
advanced_price = shipment.advanced_price
next unless advanced_price
advanced_price.seller_id = shipment.carrier_product.company_id
advanced_price.seller_type = Company.to_s
advanced_price.buyer_id = shipment.customer.id
advanced_price.buyer_type = Customer.to_s
shipment.advanced_prices << advanced_price
shipment.save! <====================================== Failing line
end
remove_column :advanced_prices, :customer_id, :integer
remove_column :advanced_prices, :company_id, :integer
end装运:
class Shipment < ActiveRecord::Base
.........
serialize :package_dimensions, PackageDimensions
serialize :shipment_errors, Array
serialize :shipment_warnings, Array
validates :shipping_date, presence: true
validates :number_of_packages, presence: true, numericality: { only_integer: true, greater_than: 0 }
validates :package_dimensions, presence: true
validates :dutiable, inclusion: { in: [true, false] }
validates :carrier_product, presence: true
...即使这个模型保存记录与那个类无关。有人知道这是为什么吗?
发布于 2014-12-20 15:38:27
结果,这是一个序列化问题。
当PackageDimensions被反序列化时,它反过来加载在类BookingLib中定义的错误类。在开发过程中,Rails延迟加载类使用自动加载,但由于错误未在自己的文件中定义,因此自动加载无法解析错误常量。
解决方案是在Shipment或PackageDimensions中包含一个要求。
require 'booking_lib'这将确保BookingLib类以及其中声明的错误在反序列化发生之前被加载。
发布于 2014-12-20 15:33:09
您还需要在“Shipment.reset_column_information”之前执行“Shipment.all.each do \ do回车”。这确保从数据库加载所有货件数据,并且不使用缓存的数据。
information
这可能不能解决你的问题,但我没有足够的观点来评论这个问题。
https://stackoverflow.com/questions/27581283
复制相似问题