1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

ActiveRecord::SchemaMigration has no primary key.

Before this patch, using `ActiveRecord::Base.primary_key_prefix_type`
with `:table_name_with_underscore` would change the `SchemaMigration` model
to have a primary key. This resulted in broken queries for PG because it tried
to return the inserted PK (which does not exist).

Closes #15051.
Closes #15419.
This commit is contained in:
Yves Senn 2014-06-06 15:53:33 +02:00
parent d23cbbb3ee
commit 8fa8b7124b
3 changed files with 24 additions and 0 deletions

View file

@ -1,3 +1,10 @@
* `ActiveRecord::SchemaMigration` has no primary key regardless of the
`primary_key_prefix_type` configuration.
Fixes #15051.
*Yves Senn*
* `rake db:migrate:status` works with legacy migration numbers like `00018_xyz.rb`. * `rake db:migrate:status` works with legacy migration numbers like `00018_xyz.rb`.
Fixes #15538. Fixes #15538.

View file

@ -5,6 +5,9 @@ require 'active_record/base'
module ActiveRecord module ActiveRecord
class SchemaMigration < ActiveRecord::Base class SchemaMigration < ActiveRecord::Base
class << self class << self
def primary_key
nil
end
def table_name def table_name
"#{table_name_prefix}#{ActiveRecord::Base.schema_migrations_table_name}#{table_name_suffix}" "#{table_name_prefix}#{ActiveRecord::Base.schema_migrations_table_name}#{table_name_suffix}"

View file

@ -17,6 +17,20 @@ if ActiveRecord::Base.connection.supports_migrations?
ActiveRecord::SchemaMigration.delete_all rescue nil ActiveRecord::SchemaMigration.delete_all rescue nil
end end
def test_has_no_primary_key
old_primary_key_prefix_type = ActiveRecord::Base.primary_key_prefix_type
ActiveRecord::Base.primary_key_prefix_type = :table_name_with_underscore
assert_nil ActiveRecord::SchemaMigration.primary_key
ActiveRecord::SchemaMigration.create_table
assert_difference "ActiveRecord::SchemaMigration.count", 1 do
ActiveRecord::SchemaMigration.create version: 12
end
ensure
ActiveRecord::SchemaMigration.drop_table
ActiveRecord::Base.primary_key_prefix_type = old_primary_key_prefix_type
end
def test_schema_define def test_schema_define
ActiveRecord::Schema.define(:version => 7) do ActiveRecord::Schema.define(:version => 7) do
create_table :fruits do |t| create_table :fruits do |t|