2012-03-02 11 views
6

Asumamos que tenemos algo así como:asociaciones y colecciones con el rugido

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 

A continuación, pasamos a hacer algo como esto:

user.extend(UserRepresenter).to_json 

y todo es simplemente genial. Pero ¿qué hay de:

User.all.to_json 

o:

company.extend(CompanyRepresenter).users.to_json? 

o incluso:

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

El resultado es siempre una gran variedad de to_json entradas normales de MongoId.

La pregunta es ¿cómo consigo algo como Company.all.to_json para tener Roared JSON incluidos los enlaces y otros datos de serialización adicionales.

+0

¿Cuál es tu pregunta? – shingara

+0

La pregunta es ¿cómo obtengo algo así como Company.all.to_json para tener Roaring json's con los enlaces y todo eso? –

Respuesta

8

Resulta que este es fácil de lograr con Representable (que es utilizado por 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) 
Cuestiones relacionadas