我有两个简单的课程
class Band
include Mongoid::Document
field :name, type:String
has_many :members
end
class Member
include Mongoid::Document
field :name, type: String
belongs_to :band
end
Run Code Online (Sandbox Code Playgroud)
在创建两个对象以进行测试之后
Band.create(title: 'New Band')
Band.members.create(name: 'New Member')
Run Code Online (Sandbox Code Playgroud)
我得到了下一个数据库状态:
> db.bands.find()
{ "_id" : ObjectId("..."), "title" : "New Band" }
> db.members.find()
{ "_id" : ObjectId("..."), "name" : "New Member", "band_id" : ObjectId("...") }
Run Code Online (Sandbox Code Playgroud)
当我尝试构建Band对象的json对象时,我得到的数据没有子级:
{"_id":"...","title":"New Band"}
Run Code Online (Sandbox Code Playgroud)
但是我需要这样的东西:
{"_id":"...","title":"New Band", "members" : {"_id":"...","title":"New Member"}}
Run Code Online (Sandbox Code Playgroud)
如何与孩子建立json?
您可以覆盖serializable_hash:
class Member
include Mongoid::Document
field :name, type: String
belongs_to :band
def serializable_hash(options={})
{
id: id,
name: name
}
end
end
class Band
include Mongoid::Document
field :title, type: String
has_many :members
def serializable_hash(options={})
{
id: id,
title: title,
members: members.inject([]) { |acc, m| acc << m.serializable_hash; acc }
}
end
end
Run Code Online (Sandbox Code Playgroud)
假设您有一个成员乐队:
band = Band.create(title: 'New Band')
band.members.create(name: 'New Member')
Run Code Online (Sandbox Code Playgroud)
在这种情况下,band.to_json您会得到如下信息:
"{\"id\":...,\"title\":\"New Band\",\"members\":[{\"id\":...,\"name\":\"New Member\"}]}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1701 次 |
| 最近记录: |