diff options
author | Patrick Robertson <patricksrobertson@gmail.com> | 2013-05-07 08:21:41 -0400 |
---|---|---|
committer | Patrick Robertson <patricksrobertson@gmail.com> | 2013-05-07 08:21:41 -0400 |
commit | 0e00c6b296b48e35fc3997648561f5da7295098a (patch) | |
tree | f40f192c3ba45801ed64d3736fbd866c2765c4fe /activerecord/lib/active_record/connection_adapters | |
parent | 33283c98ed690b12bc2bca75276236dc907798b2 (diff) | |
download | rails-0e00c6b296b48e35fc3997648561f5da7295098a.tar.gz rails-0e00c6b296b48e35fc3997648561f5da7295098a.tar.bz2 rails-0e00c6b296b48e35fc3997648561f5da7295098a.zip |
Handle other pk types in PostgreSQL gracefully.
In #10410 it was noted that you can no longer create PK's with the
type of bigserial in PostgreSQL in 4.0.0.rc1. This is mostly
because the newer adapter is checking for column type with the
id column instead of just letting it pass through like it did
before.
Side effects:
You may just create a PK column of a type that you really don't
want to be your PK. As far as I can tell this was allowed in 3.2.X
and perhaps an exception should be raised if you try and do
something extremely dumb.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 88b09e7999..2d0eef6c84 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -359,8 +359,12 @@ module ActiveRecord # a record (as primary keys cannot be +nil+). This might be done via the # +SecureRandom.uuid+ method and a +before_save+ callback, for instance. def primary_key(name, type = :primary_key, options = {}) - return super unless type == :uuid - options[:default] = options.fetch(:default, 'uuid_generate_v4()') + return super unless type = :primary_key + + if type == :uuid + options[:default] = options.fetch(:default, 'uuid_generate_v4()') + end + options[:primary_key] = true column name, type, options end |