Switching Between Draft Versions and Published Content

Switching as an editor automatically selects the database table

For pages created using Fiona and Rails, two database tables are used: released content is stored in a table named INSTANCENAME_objs, and the draft versions (or the released version if no draft version exists) are stored in a table named INSTANCENAME_preview_objs. If a CMS object has a committed version (and no draft version), it is considered a draft version.

Using the editing panel of Fiona 7, editors can easily switch between the published content and the draft versions. Technically, this causes the queried table to be switched. This takes place in the context of HTTP requests, meaning that all code that fetches data from the database via the Fiona Connector is provided with the proper data.

The rules for this switching read: If the ID of the selected workspace is rtc, and if the user has been successfully authenticated against the CMS, the INSTANCENAME_preview_objs table is used. Otherwise, INSTANCENAME_objs is used.

Switching as a developer: on the console

If you are working on the Rails console or use scripts, the workspace to use needs to be specified first. In the standard configuration setting (no matter whether the mode is standalone or legacy), the published workspace is preselected. This makes it possible to fetch published content, but not to manipulate data. So, if you wish to work with the draft versions, the rtc workspace needs to be selected first. This can be done using Scrivito::Workspace.use('rtc'), for example.

There is an important point that needs to be observed in legacy mode: Often, the APIs of the Scrivito SDK and of the Fiona Connector are used mixedly. You can specify the table to use in the Fiona Connector configuration (using RailsConnector::Configuration.mode). In development mode, it is sensible and common practice to have the Fiona Connector initially use the INSTANCENAME_preview_objs table and thus the published workspace. This may cause unexpected effects when running scripts and working on the console.

It is best practice to choose a proper configuration that doesn't leave room for surprises. Please be aware of the fact that such a configuration applies to the Rails console and scripts only. It does not affect editorial work or the content displayed to visitors.

In the development environment (development in Rails), the RailsConnector::Configuration.mode should be set to :editor. Furthermore, when running scripts or working on the console, Scrivito::Workspace.use('rtc') should always be issued. The environment for the editorial system should be configured identically.

For the productive live system, the standard configuration is usually sufficient, meaning that  RailsConnector::Configuration.mode is set to :live. Scrivito::Workspace.use('published') is executed implicitly.

If no difference is made between the live and the editorial system, the configuration for the editorial system should be used.