diff options
author | Yves Senn <yves.senn@gmail.com> | 2014-07-22 15:04:29 +0200 |
---|---|---|
committer | Yves Senn <yves.senn@gmail.com> | 2014-07-22 15:04:29 +0200 |
commit | aa3740ebd24e9c00c1611d91b4ebcc7f19e849be (patch) | |
tree | 39f6f7c82ef2e5935b4b81590bfddc21ff4dfe06 /activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb | |
parent | bb3b2d0b092af3c311ca06c5481b45ee6ee1b5b1 (diff) | |
parent | 6d327dbc0cd7969375e14a56c0a9bc6a7c847056 (diff) | |
download | rails-aa3740ebd24e9c00c1611d91b4ebcc7f19e849be.tar.gz rails-aa3740ebd24e9c00c1611d91b4ebcc7f19e849be.tar.bz2 rails-aa3740ebd24e9c00c1611d91b4ebcc7f19e849be.zip |
Merge pull request #16231 from Envek/type_in_references
* Allow to specify a type for foreign key column in migrations
* unified the docs
* some cleanup in CHANGELOG
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb index 98e6795f10..e44ccb7d81 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb @@ -280,12 +280,22 @@ module ActiveRecord column(:updated_at, :datetime, options) end + # Adds a reference. Optionally adds a +type+ column, if <tt>:polymorphic</tt> option is provided. + # <tt>references</tt> and <tt>belongs_to</tt> are acceptable. The reference column will be an +integer+ + # by default, the <tt>:type</tt> option can be used to specify a different type. + # + # t.references(:user) + # t.references(:user, type: "string") + # t.belongs_to(:supplier, polymorphic: true) + # + # See SchemaStatements#add_reference def references(*args) options = args.extract_options! polymorphic = options.delete(:polymorphic) index_options = options.delete(:index) + type = options.delete(:type) || :integer args.each do |col| - column("#{col}_id", :integer, options) + column("#{col}_id", type, options) column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options) if polymorphic index(polymorphic ? %w(id type).map { |t| "#{col}_#{t}" } : "#{col}_id", index_options.is_a?(Hash) ? index_options : {}) if index_options end @@ -500,11 +510,14 @@ module ActiveRecord end # Adds a reference. Optionally adds a +type+ column, if <tt>:polymorphic</tt> option is provided. - # <tt>references</tt> and <tt>belongs_to</tt> are acceptable. + # <tt>references</tt> and <tt>belongs_to</tt> are acceptable. The reference column will be an +integer+ + # by default, the <tt>:type</tt> option can be used to specify a different type. # # t.references(:user) + # t.references(:user, type: "string") # t.belongs_to(:supplier, polymorphic: true) # + # See SchemaStatements#add_reference def references(*args) options = args.extract_options! args.each do |ref_name| @@ -519,6 +532,7 @@ module ActiveRecord # t.remove_references(:user) # t.remove_belongs_to(:supplier, polymorphic: true) # + # See SchemaStatements#remove_reference def remove_references(*args) options = args.extract_options! args.each do |ref_name| |