Creating a draft version of an object using Audited Gem

65 Views Asked by At

Audited is made to work with the current version and previous versions. What I want is to have one more version, a future version, AKA a draft.

Desired Scenario

The current version of an object is used everywhere. However, in the admin screen, you can access and edit a future/draft version of the object. This allows you to make modifications that are not yet visible to others. When the draft is ready, you publish it, making it the current version used everywhere.

I don't see any support for this.

  1. Am I missing something? Is this supported?
  2. Is there some kind of Audited hack that can support this, even in an ugly way?
  3. If no to the above, does this seem like something that could be done reasonably with the Audited gem or am I better off using a different method?
1

There are 1 best solutions below

0
On

I didn't use the Audited gem to deliver "draft" mode. Instead, I added a boolean named active to the model, and declared

 default_scope { where(active: true) }
 scope :active, -> { where(active: true )  }
 scope :draft,  -> { where(active: false)  }

Then, in the controller, a method for administrators to see the draft items:

def in_draft
  # Admins can see all items in draft status.
  # Sellers can see only their own items in draft status.
  # Buyers can't get here at all because of the authorizations
  if current_tuser.role == "Themadmin"
    @seller_listings = Listing.unscoped.draft
  end
end

Last, a method in the controller to publish the item:

80   def publish
 81     @listing = Listing.unscoped.find(params[:id])
 82     @listing.active = true
 83     respond_to do |format|
 84       if @listing.save!
 85         format.html {redirect_to @listing, notice: 'Listing changed from draft to published.'}
 86       else
 87         format.html {redirect_to @listing, notice: 'Something went wrong'}
 88       end
 89     end
 90   end