Module: ActiveRecord::ConnectionAdapters::SchemaStatements

Defined in:
lib/active_record_foreign_keys.rb

Instance Method Summary collapse

Instance Method Details

#add_foreign_key(table_name, column_name, reference_table_name, reference_column_name, options = {}) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/active_record_foreign_keys.rb', line 48

def add_foreign_key(table_name, column_name, reference_table_name, reference_column_name, options = {})
  sql = <<-EOS
    ALTER TABLE #{quote_table_name(table_name)}
      ADD CONSTRAINT #{quote_table_name(foreign_key_constraint_name(table_name, column_name))}
  EOS
  sql += foreign_key_sql(table_name, column_name, reference_table_name, reference_column_name, options)
  execute sql
end

#foreign_key_sql(table_name, column_name, reference_table_name, reference_column_name, options = {}) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/active_record_foreign_keys.rb', line 63

def foreign_key_sql(table_name, column_name, reference_table_name, reference_column_name, options = {})
  options = {
    :on_update => :no_action,
    :on_delete => :no_action
  }.merge(options)

  "FOREIGN KEY (#{quote_column_name(column_name)}) REFERENCES #{quote_table_name(reference_table_name)}(#{quote_column_name(reference_column_name)}) ON UPDATE #{foreign_key_action(options[:on_update])} ON DELETE #{foreign_key_action(options[:on_delete])}"
end

#remove_foreign_key(table_name, column_name) ⇒ Object



57
58
59
60
61
# File 'lib/active_record_foreign_keys.rb', line 57

def remove_foreign_key(table_name, column_name)
  if foreign_key_exists?(table_name, column_name)
    execute "ALTER TABLE #{quote_table_name(table_name)} DROP CONSTRAINT #{quote_table_name(foreign_key_constraint_name(table_name, column_name))}"
  end 
end