Module: ActiveRecord::AutosaveAssociation
- Defined in:
- lib/composite_primary_keys/autosave_association.rb
Instance Method Summary collapse
Instance Method Details
#save_belongs_to_association(reflection) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/composite_primary_keys/autosave_association.rb', line 33 def save_belongs_to_association(reflection) association = association_instance_get(reflection.name) return unless association && association.loaded? && !association.stale_target? record = association.load_target if record && !record.destroyed? autosave = reflection.[:autosave] if autosave && record.marked_for_destruction? self[reflection.foreign_key] = nil record.destroy elsif autosave != false saved = record.save(validate: !autosave) if record.new_record? || (autosave && record.changed_for_autosave?) if association.updated? # CPK # association_id = record.send(reflection.options[:primary_key] || :id) association_id = reflection.[:primary_key] ? record[reflection.[:primary_key]] : record.id self[reflection.foreign_key] = association_id association.loaded! end saved if autosave end end end |
#save_has_one_association(reflection) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/composite_primary_keys/autosave_association.rb', line 3 def save_has_one_association(reflection) association = association_instance_get(reflection.name) record = association && association.load_target if record && !record.destroyed? autosave = reflection.[:autosave] if autosave && record.marked_for_destruction? record.destroy elsif autosave != false # CPK #key = reflection.options[:primary_key] ? send(reflection.options[:primary_key]) : id key = reflection.[:primary_key] ? self[reflection.[:primary_key]] : id if (autosave && record.changed_for_autosave?) || new_record? || _record_changed?(reflection, record, key) unless reflection.through_reflection record[reflection.foreign_key] = key if inverse_reflection = reflection.inverse_of record.association(inverse_reflection.name).loaded! end end saved = record.save(validate: !autosave) raise ActiveRecord::Rollback if !saved && autosave saved end end end end |