在Rails中使用Postgres多个模式数据库

10
我正在开发一个多租户应用程序,遵循这篇文章。问题在于第一次运行所有迁移时。在schema.rb文件中只有公共模式的表格,但其他模式呢?我该如何创建其他具有不同结构的模式以及public?我不想使用gems。

请参见下面的示例

要为公共模式创建的表

class CreatePerspectives < ActiveRecord::Migration
  include MultiSchema
  def up
      with_in_schemas :only => :public do
         # Create table perspectives
      end
  end


  def down
    with_in_schemas :only => :public do
      drop_table :prespectives
    end
  end
end

为私有模式创建表格


class CreateObjectives < ActiveRecord::Migration

  include MultiSchema

  def change
    with_in_schemas :except => :public do
        # Create objectives table
    end
  end
end

schema.rb

ActiveRecord::Schema.define(version: 20130810172443) do

  create_table "perspectives", force: true do |t|
    t.string   "name"
    t.datetime "created_at"
    t.datetime "updated_at"
  end
end

我不明白为什么你需要多个模式?你不能只使用一个模式,并根据用户的角色使某些信息无法访问吗? - Justus Eapen
我多年来一直使用并喜欢Postgres,并非常熟悉模式及其用法。我也是Rails开发人员。尽管如此,除非必须,否则我绝不会将两者结合使用。你不必这样做。只需设计出数据布局(通常我会称之为“模式”,但我不想混淆问题),然后添加另一个名为“公司”或拥有记录的其他名称的表。然后在各个表中赋予它所有权。我有几个类似的应用程序,这并不难。 - Michael Chaney
1个回答

2

你知道Apartment gem吗?https://github.com/influitive/apartment

我今年在一个项目中使用过,它支持postgresql的多模式。所有东西都有文档并且易于使用。而且你可以选择中间件模式。例如,当你访问customer.applicationdomain.com域时,应用程序可以为你选择正确的模式。顺便说一下,你也可以使用sidekiq进行后台作业。


问题明确指出,宝石不是一个选择。 - Djizeus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接