2008-10-29 61 views
3

我必须在传统的Postgre数据库中连接我的rails应用程序。它使用模式,从而在SQL它是常见的使用像如何在架构信息中设置Rails中的PostgreSQL表名?

SELECT * FROM "Financial".budget 

我想写一个预算模型,但我不知道如何在这种情况下设置的表名。我已经试过如下:

  • set_table_name '预算'
  • set_table_name ' “财经” .budget'

都没有worket。

回答

3

现在,这个bug似乎在2-3稳定中得到解决。看看this post

0

看看你的日志 - Rails使用各种选项生成的SQL是什么?

0
set_table_name "Financial.budget" 
0

也许扩展与您的架构的搜索路径会帮助你?

SET SEARCH_PATH TO "Financial", public; 

然后,你可以写你的查询不合格而不架构:

SELECT * FROM budget; 
3

我有类似的问题与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 
4
ActiveRecord::Base.establish_connection(
    :schema_search_path => 'Financial,public' 
) 

如果你使用的是Postgres,那么在大多数情况下,上述可能是“足够好”的。

相关问题