如何使ActiveRecord从dblink(正确)访问表?

时间:2011-08-10 14:39:28

标签: ruby-on-rails ruby oracle activerecord dblink

我正在使用Oracle数据库开发一个RoR项目。最近我将DBLink添加到另一个数据库,这只能从SQL中完美运行。 当我想使用以下代码将表添加到我的班级时......

class ServerModel < ActiveRecord::Base 
  set_table_name "S985.S985_947_MODELS_VW@R985_A947.WORLD"
  set_primary_key "model_barcode"

  acts_as_reportable
  acts_as_entity
end

...我收到此错误:

NativeException: java.sql.SQLException: ORA-02084: database name is missing a component
: select * from (SELECT "S985"."S985_947_MODELS_VW"@"R985_A947"."WORLD".* FROM "S985"."S985_947_MODELS_VW"@"R985_A947"."WORLD"  ) where rownum <= 14

当然这个自动使用的查询不起作用。它不应该选择"S985"."S985_947_MODELS_VW"@"R985_A947"."WORLD".*而只需"S985"."S985_947_MODELS_VW".*,而不必重复dblink的名称(@ R985_947.WORLD)。

这可以使用set_table_name方法或任何其他ActiveRecord方法吗?

答案看起来很简单,但我找不到解决方案。有人可以帮我解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

establish_connection您要找的是什么?

http://apidock.com/rails/ActiveRecord/Base/establish_connection/class

您可以使用它为您选择的模型设置特定于类的连接。

答案 1 :(得分:0)

不确定调整Active Record以包含DB Link名称,但是如何创建远程表的视图,如:

create or replace view S985_947_MODELS_VW
as
select * from S985_947_MODELS_VW"@"R985_A947"."WORLD"

然后只访问ROR应用程序中的视图?不确定是否可以插入,更新视图等 - 您需要检查它。我感觉可以更新并插入一个“简单”视图(即单个表上没有分组等)。