2013-07-05 3 views
0

Mongoid не включает детские документы в JSON, когда я делаю Object.to_json. Как мне это сделать? Я пробовал:Mongoid: Object.to_json - как загрузить детские объекты?

@realty = Realty.includes(:comments).find(params[:id]) 
... 
respond_to do |format| 
    format.json { render json: @realty } 
end 

Но комментарии все еще не включаются в JSON.

+0

пожалуйста, вы можете попробовать это 'Reality.includes (: комментариев)' http://mongoid.org/en/mongoid/docs/querying.html –

+0

Я просто попытался это: 'Realty .includes (: комментарии) .find (PARAMS [: Идентификация ]) '- без ошибок, но комментарии до сих пор не включены в JSON – oyatek

+0

Пожалуйста, сделайте это' @ realtiy.to_json' в консоли и поместите вывод –

ответ

2

Вы должны использовать: включить в to_json называют

@realty = Realty.find(params[:id]) 
... 
respond_to do |format| 
    format.json { render json: @realty.to_json(include: [:comments]) } 
end 

Вы можете включать в себя любую ассоциацию там.

Вы также можете использовать любой метод случайной выборки:

@foo.to_json(methods: [:some_arbitrary_method]) 

Это работает для небольшого/простого API, но проверить:
JBuilder, который является частью включения драгоценных камней 4 по умолчанию в Rails, очевидно, вы можете использовать это с какой-либо версии Rails
ActiveModel Serializers

+0

@oyatek Если это действительно маленький и простой проект, используйте ' to_json', как указано в ответе, должно быть хорошо, иначе вы можете посмотреть [RABL] (https://github.com/nesquena/rabl) или [Jbuilder] (https://github.com/rails/jbuilder) – rubish

+0

+1 добавление ответа – cpuguy83

+0

@ cpuguy83 отлично, он работает! теперь я могу каким-то образом ограничить массив включенных комментариев? Что-то вроде 'include: [: comments] .limit (3)' – oyatek

0

Я просто работаю над чем-то вроде этого, и я использую:

gem "active_model_serializers" 

https://github.com/rails-api/active_model_serializers

http://railscasts.com/episodes/409-active-model-serializers

в моем случае Project has_many :posts и результат JSON будет:

{"projects":[{"id":1,"title":"test project","description":"nice test project","slug":null,"posts":[{"id":1,"title":"new test post for test project","body":"Some content here and there","responses":[],"author":{"id":1,"email":"[email protected]"}}],"members":[]}]}

class ProjectSerializer < ActiveModel::Serializer 
    attributes :id, :title, :description, :slug 
    has_many :posts 
    has_many :memberships, key: :members 
end 

class PostSerializer < ActiveModel::Serializer 
    attributes :id, :title, :body, :responses 
end 
Смежные вопросы