Rails Postgresql有多个模式和相同的表名

Jac*_*cki 6 ruby postgresql schema activerecord ruby-on-rails

我有两个不同模式的表,例如 casesevents.

在每个模式中,我有基本表

  • events.basic
  • cases.basic

这个表有关系:

  • events.basic有一个cases.basic(cases.basic有很多events.basic)

我的尝试失败了:

文件 cases_basic.rb

class CasesBasic < ActiveRecord::Base
  set_table_name 'cases.basic'
  set_primary_key 'case_id'
  has_many :Events, :class_name => 'EventsBasic', :foreign_key => 'case_id'
end
Run Code Online (Sandbox Code Playgroud)

文件 events_basic.rb

class EventsBasic < ActiveRecord::Base
  set_table_name 'events.basic'
  set_primary_key 'event_id'
  belongs_to :Case, :class_name => 'CasesBasic', :foreign_key => 'case_id'
end
Run Code Online (Sandbox Code Playgroud)

环境:Ruby 1.9.3,Rails 3.1.3,gem 'pg'

我需要回答这个问题:

  1. 如何在Rails Active Record中处理这种情况?
  2. 如何查询这个表?
  3. 如何处理这种情况 rake db:schema:dump

编辑:

改变后belongs_tohas_many(如嘘声建议)我有同样的错误

PGError: ERROR:  column basic.case_id does not exist
LINE 1: ...IN "cases"."basic" ON "cases"."basic"."case_id" = "events"."...
                                                             ^
: SELECT  "events"."basic".* FROM "events"."basic" INNER JOIN "cases"."basic" ON "cases"."basic"."case_id" = "events"."basic"."case_id" LIMIT 3
Run Code Online (Sandbox Code Playgroud)

Rails生成错误的SQL.我应该使用一些别名:

SELECT t1.*FROM"events"."basic"t1 INNER JOIN"cases"."basic"t2 ON t1."case_id"= t2."case_id"LIMIT 3


编辑2:确定这是我的f***错误,我没有在我的示例数据库中添加events.basic.case_id列和外键.有用!


问题1和2正在起作用,但我们对此有疑问rake db:schema:dump?Rails仅为公共模式生成模型.

我有很多表和关系,我想生成它们.

Ben*_*son 1

查看http://blog.jerodsanto.net/2011/07/building-multi-tenant-rails-apps-with-postgresql-schemas/

这描述了如何配置 Rails 应用程序以使用具有多个架构的 Postgres 数据库。他将表查找比作 Unix 路径的功能,从特定位置开始,然后回到一般位置。

集成架构路径后,您可以成功查询这些表。db:schema:dump 将使用您的应用程序喜欢的相同模式优先级来读取表。