최근 몽고이 3.1에서 3.0.3으로 업데이트되었으며 이로 인해 내 편이 코드와 혼동을 일으켰습니다. 내 API에서몽고 이드 3.1 로딩, json 및 필드 이름을 열망합니다.
b = Band.new
b.name = "Sonny and Cher"
b.members << Member.new(name: "Sonny")
b.members << Member.new(name: "Cher")
b.save
나는 것 :
class Band
include Mongoid::Document
field :name, type: String
has_many :members, :autosave => true
end
class Member
include Mongoid::Document
field :name, type: String
belongs_to :band
end
은과 같이 데이터베이스에 모든 것을 저장 :
은 당신이 그렇게처럼 belongs_to/has_many 관계와 한 쌍의 클래스를 가지고 말 다음과 같이 '구성원'개체를 반환 할 수 있습니다.
m = Member.where(name: "Sonny").first
m.to_json
예상대로 다음을 산출합니다.
{"_id":"<removed>","band_id":"5151d89f5dd99dd9ec000002","name":"Sonny"}
내 클라이언트는 원할 경우 후속 통화로 전체 밴드 개체를 요청할 수 있습니다. 그러나 어떤 경우에는 참조 된 항목을 직접 포함하고자합니다. 3.0.3을 사용하면 다음을 수행 할 수 있습니다.
m = Member.where(name: "Sonny").first
m[:band] = m.band
m.to_json
이 경우 전체 대역 정보가 포함 된 새로운 필드가 추가됩니다. 3.1 그러나 (그 이전 버전에서 시작 모르지만, 내가 테스트하지 않았다), 지금이 얻을 : 밴드 정보가 필드에-열망로드 된 것처럼
{"_id":"<removed>","band_id":{"_id":"5151dc025dd99d579e000002","name":"Sonny and Cher"},"name":"Sonny"}
그래서, 그것은 보인다? 왜 ': band_id'가 아니라 ': band'라는 키 아래에 저장됩니까? 나는 ': band'가 보호되어 있다고 생각하지만 여전히 데이터가 ': band_id'키 아래에 저장되어야한다고 생각하지 않습니다. 나는 여기서 무언가를 놓치고 있다고 생각한다. 어떤 아이디어?
감사합니다. 확실히 작동합니다. 나는 JSONP (Sinatra에서)를 사용하는 경우 그것을 적응시키는 방법을 찾아야 할 것이다. 나는 아직도 기본 Mongoid 행동에 혼란 스럽다. 객체로 band_id를 채우는 것은 나에게 상처를 주었다. – Exocentric