Skip to content

Add a rollback method on resources to handle manually defining a transaction #137

@Startouf

Description

@Startouf

When dealing with transactionless operations (MongoDB, ElasticSearch, etc.) it is not possible to redefine the transaction, yet it would make sense to have a rollback method that would yield the model that was created or updated (ie the return of the create/update method.

Based on that, it would become possible to either destroy or just rollback the changes manually (ActiveModel has a nice previous_changes builtin method)

class FooResource

  def create(attributes)
    Foo.create(attributes)
  end

  def rollback(resource:, method:)
    if method == :create
      resource.destroy
    else
      resource.update_attributes(resource.previous_changes)
    end 
  end

The idea being that the rollback method would be fired automatically if there is for example a failure while persisting the related resources / sideposting

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions