Как мне справиться с миграцией ActiveRecord :: Base, которая реализовала модель без таблиц - PullRequest
0 голосов
/ 04 февраля 2012

У нас был следующий класс для обработки ответов SOAP от внешних API-интерфейсов, который прекрасно работал в ruby ​​1.8.7, но он ищет таблицу с этими столбцами после миграции (которой никогда не было) в ruby ​​1.9. 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 ]

3 голосов
/ 04 февраля 2012

У вас нет (никаких миграций для этого).

У вас нет миграций, и вы не наследуете от ActiveRecord::Base, поскольку это компонент ORM базы данных.

Если вы используете генератор для создания модели, используйте --skip-migration, чтобы избежать создания файла миграции базы данных.

Вы все еще можете получить проверки и преобразования, например,

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

Если вы хотитенекоторые установочные данные (т. е. константы, если нет дБ!), вы можете просто определить их здесь (константы начинаются с заглавной буквы).

1 голос
/ 04 февраля 2012

Полагаю, вам нужна возможность сериализации ActiveRecord :: Base. Кажется, это единственное, для чего этот класс использует его. Если это так, попробуйте вызвать это в определении вашего класса:

self.abstract_class = true

Или вы можете попробовать ActiveModel :: Serialization .

Шаблон в вашем коде похож на то, что было предложено в этом ответе для моделей AR без таблиц в Rails 2 .

...