Module: ActiveRecordUpsert::ActiveRecord::PersistenceExtensions::ClassMethods
- Defined in:
- lib/active_record_upsert/active_record/persistence.rb
Instance Method Summary collapse
- #_prepare_column(column) ⇒ Object
-
#_upsert_record(existing_attributes, upsert_attributes_names, wheres) ⇒ Object
:nodoc:.
- #inherited(subclass) ⇒ Object
- #upsert(*args) ⇒ Object
- #upsert!(attributes, arel_condition: nil, validate: true, &block) ⇒ Object
- #upsert_keys(*keys) ⇒ Object
- #upsert_options ⇒ Object
Instance Method Details
#_prepare_column(column) ⇒ Object
83 84 85 86 87 88 89 90 91 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 83 def _prepare_column(column) column = attribute_alias(column) if attribute_alias?(column) if columns_hash.key?(column) column elsif reflections.key?(column) reflections[column].foreign_key end end |
#_upsert_record(existing_attributes, upsert_attributes_names, wheres) ⇒ Object
:nodoc:
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 58 def _upsert_record(existing_attributes, upsert_attributes_names, wheres) # :nodoc: upsert_keys = self.upsert_keys || [primary_key] upsert_attributes_names = upsert_attributes_names - [*upsert_keys, 'created_at'] existing_attributes = existing_attributes .transform_keys { |name| _prepare_column(name) } .reject { |key, _| key.nil? } upsert_attributes_names = upsert_attributes_names .map { |name| _prepare_column(name) } .compact values_for_upsert = existing_attributes.select { |(name, _value)| upsert_attributes_names.include?(name) } insert_manager = arel_table.compile_upsert( upsert_keys, , _substitute_values(values_for_upsert), _substitute_values(existing_attributes), wheres ) connection.upsert(insert_manager, "#{self} Upsert") end |
#inherited(subclass) ⇒ Object
106 107 108 109 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 106 def inherited(subclass) super subclass.upsert_keys(upsert_keys, ) end |
#upsert(*args) ⇒ Object
52 53 54 55 56 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 52 def upsert(*args) upsert!(*args) rescue ::ActiveRecord::RecordInvalid false end |
#upsert!(attributes, arel_condition: nil, validate: true, &block) ⇒ Object
42 43 44 45 46 47 48 49 50 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 42 def upsert!(attributes, arel_condition: nil, validate: true, &block) if attributes.is_a?(Array) attributes.collect { |hash| upsert(hash, &block) } else new(attributes, &block).upsert!( attributes: attributes.keys, arel_condition: arel_condition, validate: validate ) end end |
#upsert_keys(*keys) ⇒ Object
93 94 95 96 97 98 99 100 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 93 def upsert_keys(*keys) return @_upsert_keys if keys.empty? = keys. keys = keys.first if keys.size == 1 # support single string/symbol, multiple string/symbols, and array return if keys.nil? @_upsert_keys = Array(keys) = end |
#upsert_options ⇒ Object
102 103 104 |
# File 'lib/active_record_upsert/active_record/persistence.rb', line 102 def || {} end |