Search code examples
ruby-on-railsrubyrails-modelscouchrest

How to add property in module in Rails CouchRest Model to support multiple inheritance?


In my class, I want to include multiple modules. Each module can define its own property to persist in couchDB.

Here is an example:

module Owner
 property :name
end

module Animal
 property :type
end

class Cat
 include Owner
 include Animal
end

This doesn't work. I got this error: "undefined method `property'". I tried added CouchRest::Model::Embeddable but it won't work for module either. All the examples I am seeing are extending from CouchRest::Model::Base. However, I won't be able to use this approach because Ruby doesn't support multiple inheritance.

I won't be able to change the underlying JSON format. My desired format is {"name":"tom","type":"cat"}.

Any help would be appreciated. Thanks!


Solution

  • According to http://www.couchrest.info/model/embedding.html I think your example would be:

    class Owner < CouchRest::Model::Base
     include CouchRest::Model::Embeddable
     property :name
    end
    
    class Animal < CouchRest::Model::Base
     include CouchRest::Model::Embeddable
     property :type
    end
    
    class Cat
     property :owner, Owner
     property :animal, Animal
    end