CouchDB makes it really easy to create databases on the fly, so easy in fact that it is perfectly feasible to have one database per user or per company or per whatever makes sense to split into its own individual database. CouchRest Model now makes it really easy to support this scenario using the proxy methods. Here’s a quick example:
# Define a master company class, its children should be in their own DB class Company < CouchRest::Model::Base use_database COUCHDB_DATABASE property :name property :slug proxy_database_method :slug proxy_for :invoices end # Invoices belong to a company class Invoice < CouchRest::Model::Base property :date property :total proxied_by :company design do view :by_date end end
By setting up our models like this, the invoices should be accessed via a company object:
company = Company.first company.invoices.new # build a new invoice company.invoices.by_date.first # find company's first invoice by date
Internally, all requests for invoices are passed through a model proxy. Aside from the basic methods and views, it also ensures that some of the more complex queries are supported such as validating for uniqueness and associations.
proxy_database_method defines the name of the method that should be called to return the desired name of the database for the instance. The project’s database prefix and suffix will be added if they are specified in the configuration. If you’d like to provide your own method for setting the database, simply override the
proxy_database method so that a CouchRest Database of your choosing is returned.
For obvious reasons, it is not a good idea to use a variable that can change for the database name, so the object’s id might be a reasonable choice.
Deleting an proxy model will not automatically delete the associated database, you’d have to do this manually in a callback.blog comments powered by Disqus