Como definir nomes de tabela do PostgreSQL em Rails com informações de esquema?

votos
3

Eu tenho que ligar o meu rails aplicativo em um banco de dados Postgre legado. Ele usa esquemas lo em um SQL seu é comum usar algo como

SELECT * FROM Financial.budget

Eu quero escrever um modelo de orçamento, mas eu não sei como definir o nome da tabela neste caso. Eu tentei o seguinte:

  • 'Orçamento' set_table_name
  • set_table_name '.budget Financial'

Nenhum deles worket.

Publicado 29/10/2008 em 19:40
fonte usuário
Em outras línguas...                            


7 respostas

votos
0

Olhe para os seus logs - o que SQL é Rails geração com suas várias opções?

Respondeu 30/10/2008 em 00:02
fonte usuário

votos
0
set_table_name "Financial.budget"
Respondeu 30/10/2008 em 00:23
fonte usuário

votos
0

Talvez estender o caminho de pesquisa com o esquema irá ajudá-lo?

SET SEARCH_PATH TO "Financial", public;

Em seguida, você pode escrever sua consulta não qualificada, sem o esquema:

SELECT * FROM budget;
Respondeu 30/10/2008 em 19:02
fonte usuário

votos
3

Eu tive problema semelhante com adaptador Oracle. Por padrão ActiveRecord sempre cita nomes de tabela em SQL e, portanto, se você especificar

set_table_name "Financial.budget"

então gerado SQL será

SELECT * FROM "Financial.budget"

que não vai funcionar.

Para resolver este problema você precisa adaptador PostgreSQL remendo macaco. Colocar em seu environment.rb ou em initializer separado o seguinte código:

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

Agora você deve definir em sua classe de modelo

set_table_name "Financial.budget"

e SQL gerado será

SELECT * FROM Financial.budget
Respondeu 08/11/2008 em 21:36
fonte usuário

votos
3

Agora, este bug parece ser resolvido em 2-3 estável. Dê uma olhada neste post

Respondeu 28/04/2009 em 13:19
fonte usuário

votos
4
ActiveRecord::Base.establish_connection(
    :schema_search_path => 'Financial,public'
)

Se você estiver usando Postgres, o acima é, provavelmente, "bom o suficiente" para a maioria das situações.

Respondeu 13/07/2010 em 17:13
fonte usuário

votos
0

Nós projetamos uma jóia para tornar o trabalho ActiveRecord com PostgreSQL. Aqui está um pequeno exemplo de uso: http://greyblake.com/blog/2012/09/06/pg-power-activerecord-extension-for-postgresql/

Respondeu 07/09/2012 em 11:23
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more