Rails preview update associations without saving to database

In these docs you have:

When are Objects Saved?

When you assign an object to a has_and_belongs_to_many association, that object is automatically saved (in order to update the join table). If you assign multiple objects in one statement, then they are all saved.

If you want to assign an object to a has_and_belongs_to_many association without saving the object, use the collection.build method.

Here is a good answer for Rails 3 that goes over some of the same issues

Rails 3 has_and_belongs_to_many association: how to assign related objects without saving them to the database


Transactions

Creating transactions is pretty straight forward:

Event.transaction do
  @event.audiences.create!
  @event.audiences.first.destroy!
end

Or

@event.transaction do
  @event.audiences.create!
  @event.audiences.first.destroy!
end

Notice the use of the "bang" methods create! and destroy!, unlike create which returns false create! will raise an exception if it fails and cause the transaction to rollback.

You can also manually trigger a rollback anywhere in the a transaction by raising ActiveRecord::Rollback.

Build

build instantiates a new related object without saving.

event = Event.new(name: 'Party').audiences.build(name: 'Party People')
event.save # saves both event and audiences