Rails不会在非公共模式

时间:2016-06-26 09:09:10

标签: ruby-on-rails postgresql ruby-on-rails-4

我在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。在这种情况下,这些表将在公共模式中创建,而不是“已结束”模式。

0 个答案:

没有答案