2015-01-26 2 views
0

Я переместил устаревший код в модуль Legacy, который использует отдельную базу данных только для чтения (старую базу данных MySQL) по мере того, как мы перешли на PostgreSQL для новой версии.Полиморфный класс переместился в модуль Legacy и ищет полиморфный тип Legacy :: Class вместо класса

Все запрашивается, пока мы не доберемся до Полиморфных ассоциаций. Он хочет искать eventable_type: «Legacy :: Schedule» вместо «Schedule».

Я мог бы сделать обновление на поле, чтобы перейти на «Наследие :: Расписание», но я не думаю, что это самое чистое решение. Я хотел бы просто изменить запрос ActiveRecord в API или если есть хакеры отношений, я бы тоже предпочел это.

Вот пример того, что у меня есть:

class Legacy::LegacyData < ActiveRecord::Base 
    self.abstract_class = true 

    case Rails.env 
    when "production" 
    establish_connection :legacy_production 
    when "development" 
    establish_connection :legacy_development 
    when "test" 
    establish_connection :legacy_test 
    else 
    puts "connection: Rails.env error on establish_connection" 
    end 
end 

,

module Legacy 
    class Event < Legacy::LegacyData 
    belongs_to :eventable, polymorphic: true 
    ... 
    end 
end 

,

module Legacy 
    class Schedule < Legacy::LegacyData 
    has_many :events, as: :eventable 

    ... 
    end 
end 

ответ

0

Внутри Наследство :: Event

def eventable 
    if self.eventable_type == 'Schedule' 
    Legacy::Schedule.find(self.eventable_id) 
    else 
    Legacy::OtherClass.find(self.eventable_id) 
    end 
end 

ОБНОВЛЕНИЕ:

Это неполное. Не учитывается, например, когда Legacy :: Запланирует запросы или строит на своей ассоциации событий, где он по-прежнему запрашивает для Legacy :: Schedule

Смежные вопросы