Rails Postgresql多个模式和相同的表名 [英] Rails Postgresql multiple schemas and the same table name

查看:491
本文介绍了Rails Postgresql多个模式和相同的表名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在两个不同的模式下有两个表,例如
个案例事件

I have two tables in two different schemas e.g. cases and events.

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

In each schema I have table basic


  • events.basic

  • cases.basic

  • events.basic
  • cases.basic

此表具有以下关系:


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

  • events.basic has one cases.basic (cases.basic has many 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'

Enviroment: Ruby 1.9.3, Rails 3.1.3, gem 'pg'

我需要回答以下问题:


  1. 如何在Rails Active Record中处理这种情况?

  2. 如何查询此表?

  3. 如何在 rake db:schema:dump

  1. how to handle this situation in Rails Active Record?
  2. how to query this tables?
  3. how to handle this situation in rake db:schema:dump






编辑:


在更改 belongs_to has_many (如Catcall建议)后,我有相同的错误

After changing belongs_to and has_many (like Catcall suggest) i have the same error

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

铁路发生吃了不好的SQL。我应该使用一些别名来完成操作:

Rails generate bad SQL. I should be done using some aliases:

选择t1。*从事件。基本 t1内联接案例。基本 t2 ON t1。 case_id = t2。 case_id限制3

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起作用,但我们对<$ c有疑问$ c> rake db:schema:dump 怎么样? Rails只为公共模式生成模型。

Questions 1 AND 2 are working but we have question about rake db:schema:dump what about it? Rails generates models only for public schema.

我有太多的表和关系想要生成它们。

I have so many tables and relations that i want to generate them.

推荐答案

我建议使用 pg_power宝石。它提供了在以下迁移中创建PostgreSQL模式的语法:

I would recommend using pg_power gem. It provides syntax for creating PostgreSQL schemas in migrations like this:

def change
  drop_schema 'demography'
  create_schema 'politics'
end

还要注意将模式转储到schema.rb文件中正确。

And also takes care about dumping schemas into schema.rb file correctly.

这篇关于Rails Postgresql多个模式和相同的表名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆