Agile Web Development

Build it. Launch it. Love it.

Acts as publishable


With acts as publishable, you can turn any model into a publishable model. It provides all the required components that
you need to publish, unpublish, archive or reset a publishable model. Features:

  • Auto update status field.
  • Auto update/reset published time and archived time.
  • i18n support for readiness validation (optional), with publishable scope as shown in the following Step 4.
  • Auto generate readiness message errors. When you click on a “not ready” icon, the readiness messages for each record
    is shown in a “tooltip” like


demo at

more documentation at

Step 1.

script/plugin install git://

Step 2.

To create the publishing components under
./script/generate publishing

To create the publishing components under admin
./script/generate publishing Admin
This will create:

  • create app/controllers/admin
  • create app/controllers/admin/publishing_controller.rb
  • force vendor/plugins/acts_as_publishable/lib/publishable/publishable_helper.rb
  • create app/views/admin/publishing
  • create app/views/admin/publishing/_publishing_status.rhtml
  • create app/views/admin/publishing/_publishing_tooltip.rhtml
  • create app/views/admin/publishing/_tooltip_publishing_status.rhtml
  • create public/images/admin/publishing
  • create public/images/admin/publishing/not_ready.png
  • create public/images/admin/publishing/not_ready_small.png
  • create public/images/admin/publishing/ready.png
  • create public/images/admin/publishing/ready_small.png
  • create public/images/admin/publishing/published.png
  • create public/images/admin/publishing/published_small.png
  • create public/images/admin/publishing/archived.png
  • create public/images/admin/publishing/archived_small.png
  • create public/images/admin/publishing/arrow.png
  • create test/functional/admin
  • create test/functional/admin/publishing_controller_test.rb

Step 3.

To use acts_as_publishable, add status* (:string), published_at (:datetime) and archived_at (:datetime) attributes to
your model and define :required_fields_for_publishing fields as follows.
During publishing actions, acts_as_publishable will set the status, published_at or archived_at and update your model.

class Video < ActiveRecord::Base
acts_as_publishable :required_fields_for_publishing => [“title”, “channels”, “video_file”, “thumbnails”]


*default status_column name is “status” alternatively you can provide a different column name using :status_column, like
in the following example.

class Magazine < ActiveRecord::Base
acts_as_publishable :status_column => :stage, :required_fields_for_publishing => [“name”, “description”]

Step 4.
If you like to integrate i18n with readiness errors or override the default readiness messages you can use rails i18n
module, act_as_publishable look up i18n file for readiness errors in a “publishable” scope, as shown below.
#en.yml file
video_title: “This video needs a title.”
video_channels: “This video needs at least one ‘ready’ channel.”
video_video_file: “This video needs a video file.”
video_thumbnails: “This video needs at least one thumbnail photo.”
magazine_name: “Name is required.”
magazine_description: “Description is required.”
The i18n key format (example video_title, “#{!}_#{field}”) is generated using the model name and
the respective field name given in the “required_fields_for_publishing” list.

Step 5.
Include “publishing_status_tag” tag in your views where you need the status and controls to appear.
Here is an example again from our demo app.


<%= publishing_actions_tag(@video)%>

Step 6.
Review tests for more information.

Copyright © 2009 [Prabode Weebadde, Sharn Jayantha], released under the MIT license


Repository git://
License Rails' (MIT)
Rating (4 votes)
Owner Prabode Weebadde
Created 14 October 2009


Add a comment