我将遗留代码移动到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
答案 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