Method: ActiveRecord::ConnectionAdapters::SchemaStatements#foreign_key_options

Defined in:
activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb

#foreign_key_options(from_table, to_table, options) ⇒ Object

:nodoc:



1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
# File 'activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb', line 1246

def foreign_key_options(from_table, to_table, options) # :nodoc:
  options = options.dup

  if options[:primary_key].is_a?(Array)
    options[:column] ||= options[:primary_key].map do |pk_column|
      foreign_key_column_for(to_table, pk_column)
    end
  else
    options[:column] ||= foreign_key_column_for(to_table, "id")
  end

  options[:name]   ||= foreign_key_name(from_table, options)

  if options[:column].is_a?(Array) || options[:primary_key].is_a?(Array)
    if Array(options[:primary_key]).size != Array(options[:column]).size
      raise ArgumentError, "        For composite primary keys, specify :column and :primary_key, where\n        :column must reference all the :primary_key columns from \#{to_table.inspect}\n      MSG\n    end\n  end\n\n  options\nend\n".squish