Как установить имена таблиц PostgreSQL в Rails со схемой информации? - PullRequest
3 голосов
/ 29 октября 2008

Мне нужно подключить мое приложение rails к устаревшей базе данных Postgre. Он использует схемы, поэтому в SQL обычно используют что-то вроде

SELECT * FROM "Financial".budget

Я хочу написать модель бюджета, но я не знаю, как установить имя таблицы в этом случае. Я пробовал следующее:

  • set_table_name 'budget'
  • set_table_name '"Financial" .budget'

Нет рабочих.

Ответы [ 7 ]

4 голосов
/ 13 июля 2010
ActiveRecord::Base.establish_connection(
    :schema_search_path => 'Financial,public'
)

Если вы используете Postgres, вышеприведенное, вероятно, "достаточно хорошо" для большинства ситуаций.

3 голосов
/ 28 апреля 2009

Теперь эта ошибка, кажется, решена в 2-3-стабильной. Взгляните на этот пост

3 голосов
/ 08 ноября 2008

У меня была похожая проблема с адаптером Oracle. По умолчанию ActiveRecord всегда заключает в кавычки имена таблиц в SQL и, следовательно, если вы укажете

set_table_name "Financial.budget"

тогда сгенерированный SQL будет

SELECT * FROM "Financial.budget"

, который не будет работать.

Чтобы решить эту проблему, вам нужно подключить адаптер PostgreSQL. Поместите в ваш environment.rb или в отдельный инициализатор следующий код:

ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
  # abstract_adapter calls quote_column_name from quote_table_name, so prevent that
  def quote_table_name(name)
    name
  end
end

Теперь вы должны определить в классе вашей модели

set_table_name "Financial.budget"

и сгенерированный SQL будет

SELECT * FROM Financial.budget
0 голосов
/ 07 сентября 2012

Мы разработали гем для работы ActiveRecord с PostgreSQL. Вот небольшой пример использования: http://greyblake.com/blog/2012/09/06/pg-power-activerecord-extension-for-postgresql/

0 голосов
/ 30 октября 2008

Возможно, расширение маршрута поиска с помощью вашей схемы поможет вам?

SET SEARCH_PATH TO "Financial", public;

Тогда вы можете написать свой запрос без условия без схемы:

SELECT * FROM budget;
0 голосов
/ 30 октября 2008
set_table_name "Financial.budget"
0 голосов
/ 30 октября 2008

Посмотрите на ваши логи - какой SQL генерирует Rails с вашими различными опциями?

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