如何处理实现无表格模型的ActiveRecord :: Base的迁移

时间:2012-02-04 05:39:17

标签: ruby-on-rails soap model ruby-on-rails-3.1 migration

我们有以下类来处理来自外部API的SOAP响应,这些响应在ruby 1.8.7中运行良好,但它正在寻找一个表,其中包含迁移后的这些列(从未出现过)。 2 / rails 3.1,我该如何处理这种迁移?

class SoapResponse < ActiveRecord::Base 
  def self.columns
    @columns ||= [];
  end

  def self.column(name, sql_type = nil, default = nil, null = true)
    columns << ActiveRecord::ConnectionAdapters::Column.new(
      name.to_s, default, sql_type.to_s, null)
  end

  def save(validate = true)
    validate ? valid? : true
  end

  column :soap_payload, :text
  serialize :soap_payload
end

2 个答案:

答案 0 :(得分:3)

你没有(有任何迁移)。

您没有迁移,也没有从ActiveRecord::Base继承,因为这是数据库ORM组件。

如果使用生成器创建模型,请使用--skip-migration以避免生成数据库迁移文件。

您仍然可以获得验证和转换,例如

class SoapResponse
  include ActiveModel::Validations
  include ActiveModel::Conversion

如果你想要一些设置数据(即常量,假设没有数据库!)你可以在这里定义它们(常量以大写字母开头)。

答案 1 :(得分:1)

我想你想要ActiveRecord :: Base的序列化功能。这似乎是这个班级唯一使用它的东西。如果是这样,请尝试在类定义中调用它:

self.abstract_class = true

或者您可以尝试使用ActiveModel::Serialization

代码中的模式与this answer for table-less AR models in Rails 2中建议的模式类似。