我在Postgres中通过rails migration在新架构中创建了一个新表(名称 - “结束”)
class CreateWeeklyLeaderboard < ActiveRecord::Migration
def up
execute('create schema concluded')
create_table('concluded.weekly_leaderboard') do |t|
t.date :week_start_date
t.references :user
t.integer :rank
t.integer :points
t.timestamps null: true
end
end
def down
drop_table('concluded.weekly_leaderboard')
execute('drop schema concluded')
end
end
如果将架构添加到数据库配置中,您将获得schema.rb中的表定义
development:
adapter: postgresql
encoding: utf8
database: duggout
host: 127.0.0.1
pool: 5
username: postgres
password: pass
schema_search_path: public, concluded
schema.rb中的create_table如下所示:
create_table "weekly_leaderboard", force: :cascade do |t|
t.date "week_start_date"
t.integer "user_id"
t.integer "rank"
t.integer "points"
t.datetime "created_at"
t.datetime "updated_at"
end
如您所见,架构名称未出现在此文件中。如何确保schema.rb中的模式名称存在于非公共表中?
这很重要,因为在我们的测试计算机(或CI代理)中,我们按照Rails的建议rake schema:load
而不是rake db:migrate
。在这种情况下,这些表将在公共模式中创建,而不是“已结束”模式。