From acd0287dc18a3fbba6fa4301cb31a7aecd22922b Mon Sep 17 00:00:00 2001 From: Yves Senn Date: Wed, 11 Jun 2014 08:47:53 +0200 Subject: fk: support for on_update --- .../active_record/connection_adapters/abstract/schema_creation.rb | 5 +++-- .../active_record/connection_adapters/abstract/schema_definitions.rb | 4 ++++ .../active_record/connection_adapters/abstract/schema_statements.rb | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) (limited to 'activerecord/lib/active_record/connection_adapters/abstract') diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb index aad4431910..b896bd25e4 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rb @@ -24,7 +24,8 @@ ADD CONSTRAINT #{quote_column_name(o.name)} FOREIGN KEY (#{quote_column_name(o.column)}) REFERENCES #{quote_table_name(o.to_table)} (#{quote_column_name(o.primary_key)}) SQL - sql << " #{action_sql(o.on_delete)}" if o.on_delete + sql << " #{action_sql('DELETE', o.on_delete)}" if o.on_delete + sql << " #{action_sql('UPDATE', o.on_update)}" if o.on_update sql end @@ -101,7 +102,7 @@ FOREIGN KEY (#{quote_column_name(o.column)}) options.include?(:default) && !(options[:null] == false && options[:default].nil?) end - def action_sql(action = "DELETE", dependency) + def action_sql(action, dependency) case dependency when :nullify then "ON #{action} SET NULL" when :cascade then "ON #{action} CASCADE" 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 2d6cf2427c..2e47e68754 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_definitions.rb @@ -41,6 +41,10 @@ module ActiveRecord def on_delete options[:on_delete] end + + def on_update + options[:on_update] + end end # Represents the schema of an SQL table in an abstract way. This class diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb index 3f72e35bb5..18e73b0200 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_statements.rb @@ -654,7 +654,8 @@ module ActiveRecord column: options[:column], primary_key: primary_key, name: foreign_key_name(from_table, options), - on_delete: options.fetch(:on_delete, nil) + on_delete: options[:on_delete], + on_update: options[:on_update] } at = create_alter_table from_table at.add_foreign_key to_table, options -- cgit v1.2.3