Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
37 lines (21 sloc) 2.44 KB

RelaxDB 0.5

RelaxDB documents are now directly backed by the hash created by JSON.parse. This offers a significant real-world performance improvement. This change means that instance variables that map to CouchDB properties should no longer be manipulated directly – doing this was always a little risky as the behaviour was never firmly defined. But, if you need to preserve such behaviour use data['my_prop_name'] instead of the my_prop_name instance variable.

The methods has_one, has_n and references_many have been removed. Although convenient, in practice, their use contributed to non-idiomatic usage of CouchDB. Storing an array of document ids may be a suitable replacement for references_many as the underlying docs can be retrieved in a single query.

RelaxDB 0.4

RelaxDB 0.4 contains a number of breaking changes. However, most clients should be able to upgrade smoothly.


The largest change concerns automatic view generation. Prior to 0.4 an invocation of view_by :foo would create a JavaScript view in CouchDB of the form emit(, doc);. This idiom is generally advised against. It makes view generation comparatively slow, and in particular, causes performance issues for large databases. In 0.4 view_by :foo now creates a map of the form emit(, 1); and creates a reduce using the _sum builtin.

If view size isn’t an issue for you, legacy behaviour can be preserved by replacing all invocations of view_by with view_docs_by. Similarly, any invocations of RelaxDB.view against auto-generated views should be replaced with

Note that view_by invocations no longer add paginate methods to the current class. Paginating over these views should be done with one of RelaxDB.paginate or RelaxDB.qpaginate.

View Uploading

The standard idiom for saving autogenerated views is now

  require File.dirname(__FILE__) + '/spec_models.rb'

The explicit call to .save is new in 0.4. It was added to enable creating all views in a single request, rather than requiring a request per view.


The standard paginate method makes three requests against CouchDB. One to retrieve the docs and a further two to determine if next and prev links should exist. In some instances it may be preferable to save two requests and present potentially spurious pagination links. The qpaginate method does just this.