Polymorphic类转移到Legacy Module并且正在寻找多态类型Legacy :: Class而不是Class

时间:2015-01-26 19:23:06

标签: module polymorphism legacy

我将遗留代码移动到Legacy Module中,该模块使用一个单独的只读数据库(旧的MySQL数据库),因为我们已经移植到PostgreSQL以获取新版本。

在我们进入多态关联之前,一切都很好。它想要查找eventable_type:'Legacy :: Schedule'而不仅仅是'Schedule'。

我可以对该字段进行更新以更改为“Legacy :: Schedule”,但我认为这不是最干净的解决方案。我想修改API中的ActiveRecord查询,或者如果存在关系黑客,我也会更喜欢。

以下是我的例子:

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

1 个答案:

答案 0 :(得分:0)

Inside Legacy :: Event

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

更新:

这是不完整的。不考虑Legacy :: Schedule查询或构建其事件关联时的情况,然后它仍然查询Legacy :: Schedule