2012-03-02 36 views
6

Giả sử chúng ta có một cái gì đó như:hiệp hội và các bộ sưu tập với 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 

Sau đó, chúng tôi tiếp tục làm điều gì đó như thế này:

user.extend(UserRepresenter).to_json 

Và tất cả mọi thứ chỉ là tuyệt vời. Nhưng làm thế nào về:

User.all.to_json 

hay:

company.extend(CompanyRepresenter).users.to_json? 

hoặc thậm chí:

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

Kết quả luôn luôn là một mảng của to_json mục bình thường Mongoid của.

Câu hỏi đặt ra là làm cách nào để tôi nhận được một cái gì đó như Company.all.to_json để có các JSON được roaring bao gồm các liên kết và dữ liệu tuần tự hóa phụ khác.

+0

câu hỏi của bạn là gì? – shingara

+0

Câu hỏi đặt ra là làm thế nào để tôi có được một cái gì đó như Company.all.to_json để có Roared json với các liên kết và tất cả. –

Trả lời

8

Hóa ra đây là đơn giản để đạt được sử dụng Representable (được sử dụng bởi 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) 
Các vấn đề liên quan