2012-03-02 2 views
6

Supposons que nous ayons quelque chose comme:Associations et collections avec Roar

class Company 
    include Mongoid::Document 
    has_many :users 
    field :name, type: String 
end 

class User 
    include Mongoid::Document 
    belongs_to :company 
    field :name, type: String 
end 

module CompanyRepresenter 
    include Roar::Representer::JSON 
    property :name 
end 

module UserRepresenter 
    include Roar::Representer::JSON 
    property :name 
    link :self do 
    user_url 
    end 
end 

Ensuite, nous allons à faire quelque chose comme ceci:

user.extend(UserRepresenter).to_json 

Et tout est tout simplement génial. Mais que diriez-vous:

User.all.to_json 

ou:

company.extend(CompanyRepresenter).users.to_json? 

ou même:

company.users.collect{|u| u.extend(UserRepresenter)}.extend(Representable::JSON::Collection).to_json 

Le résultat est toujours un tableau de to_json normales entrées de MongoId.

La question est comment puis-je obtenir quelque chose comme Company.all.to_json pour avoir Roared JSONs y compris les liens et autres données de sérialisation supplémentaires.

+0

Quelle est votre question? – shingara

+0

La question est comment puis-je obtenir quelque chose comme Company.all.to_json d'avoir Roared json avec les liens et tous. –

Répondre

8

Il se trouve est simple à réaliser en utilisant Representable (qui est utilisé par Roar):

require 'roar/representer/json' 

module PostRepresenter 
    include Roar::Representer::JSON 

    property :id 
    property :title 
end 

require 'representable/json/collection' 

module PostsRepresenter 
    include Representable::JSON::Collection 

    items extend: PostRepresenter 
end 

Post.limit(10).extend(PostsRepresenter)