首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行迁移会导致未找到类,即使未使用

运行迁移会导致未找到类,即使未使用
EN

Stack Overflow用户
提问于 2014-12-20 14:44:57
回答 2查看 46关注 0票数 0

我试图运行一个迁移文件,但是当它运行时,我得到一个

代码语言:javascript
复制
undefined class/module BookingLib::/......./db/migrate/20141216090123_migrate_old_advanced_price_data.rb:18:in `block in up'

迁移文件:

代码语言:javascript
复制
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

装运:

代码语言:javascript
复制
  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
...

即使这个模型保存记录与那个类无关。有人知道这是为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-20 15:38:27

结果,这是一个序列化问题。

PackageDimensions被反序列化时,它反过来加载在类BookingLib中定义的错误类。在开发过程中,Rails延迟加载类使用自动加载,但由于错误未在自己的文件中定义,因此自动加载无法解析错误常量。

解决方案是在ShipmentPackageDimensions中包含一个要求。

代码语言:javascript
复制
require 'booking_lib'

这将确保BookingLib类以及其中声明的错误在反序列化发生之前被加载。

票数 2
EN

Stack Overflow用户

发布于 2014-12-20 15:33:09

您还需要在“Shipment.reset_column_information”之前执行“Shipment.all.each do \ do回车”。这确保从数据库加载所有货件数据,并且不使用缓存的数据。

information

这可能不能解决你的问题,但我没有足够的观点来评论这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27581283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档