【发布时间】:2012-01-15 16:55:19
【问题描述】:
我有两个不同模式的表,例如
cases 和 events。
在每个模式中我都有基本表
events.basiccases.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
文件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
环境:
Ruby 1.9.3,Rails 3.1.3,gem 'pg'
我需要回答这个问题:
- 如何在 Rails Active Record 中处理这种情况?
- 如何查询这个表?
- 如何在
rake db:schema:dump处理这种情况
编辑:
更改belongs_to 和has_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
Rails 生成错误的 SQL。我应该使用一些别名来完成:
SELECT t1.* FROM "events"."basic" t1 INNER JOIN "cases"."basic" t2 ON t1."case_id" = t2."case_id" LIMIT 3
编辑 2: 好的,这是我的错误,我没有在示例数据库中添加 events.basic.case_id 列和外键。 有效!
问题 1 和 2 有效,但我们对 rake db:schema:dump 有疑问,那该怎么办? Rails 仅为公共模式生成模型。
我有很多表和关系,我想生成它们。
【问题讨论】:
-
您的
:Events和:Case应该是:events和:case但这可能无法解决问题。 -
@muistooshort
:Events和:Case看起来像别名,在这种情况下不会被带到 SQL 中 -
我对表格的外观有点困惑,
ON "cases"."basic"."case_id" = "events"."basic"."case_id"连接条件应该是什么样的?其中一张表没有case_id,这是一个问题,如果您手动编写连接条件,您将如何编写? -
尝试在您的
databases.yaml中设置schema_search_path: public,events,cases,然后尝试您的rake db:schema:dump。 -
你会得到一个
schema.rb里面的所有东西,但没有一个表名包含 PostgreSQL 模式前缀,对吧?
标签: ruby-on-rails ruby postgresql activerecord schema