Как заставить ActiveRecord получить доступ к таблице из dblink (правильно)? - PullRequest
0 голосов
/ 10 августа 2011

Я разрабатываю проект RoR с использованием базы данных Oracle.Недавно я добавил 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 голосов
/ 10 августа 2011

Не уверен насчет настройки Active Record для включения имени DB Link, но как насчет создания представления удаленной таблицы, что-то вроде:

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

А затем просто получить доступ к представлению в приложении ROR? Не уверен, что представление может быть вставлено, обновлено и т. Д. - вам нужно проверить это. У меня есть ощущение, что «простое» представление (т. Е. Одно на одной таблице без группы и т. Д.) Можно обновить и вставить в него.

0 голосов
/ 10 августа 2011

Является ли establish_connection тем, что вы ищете?

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

Вы можете использовать это, чтобы установить специфичные для класса соединения для выбранных вами моделей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...