2013-07-01 3 views
0

저는 MongoDB 및 MongoID의 실제 초보자입니다. 나는 내가 Objet 새로운 만들 때 무엇을 얻을 두 개의 발판MongoID가 포함 된 문서의 한 필드 만 표시

class Objet 
    include Mongoid::Document 
    field :nom, type: String 

    embeds_one :coordonnee 
end 

그리고

class Coordonnee 
    include Mongoid::Document 
    field :adresse1, type: String 
    field :adresse2, type: String 
    field :code_postal, type: String 
    field :ville, type: String 

    embedded_in :objet 
end 

을 만들어 : 이제

Objet document

를, 나는 단지 현장을 보여주기 위해 노력하고있어 이 문서는 adresse1이지만 작동하지 않습니다. 나는이 일을 단지 전체 포함 된 문서를 표시 할 수 있습니다

내가 할 경우 :

<%= @objet.coordonnees.adresse1 %> 

내가이 오류 :

undefined method `adresse1' for #<Hash:0x2b2b1f0> 

내가 어떻게 할 수 있습니까?

편집

, 나는 "Adresse1, adresse2, 빌, code_postal"모든 요소를 ​​표시 할 수 지내요 :

Controller 

def show 
    @objet = Objet.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @objet } 
    end 
    end 

View 

<%= @objet.nom %> 
    <% @objet.coordonnee.each do |t| %> 
    <%= t[1] %> 
    <% end %> 

하지만 내 질문은 : 어떻게 그 중 하나를 표시하려면? 빌과 같은, 또는 code_postal 또는 adresse1 ...?

답변

0

MongoID에별로 익숙하지 않지만 mongo를 직접 호출 할 수 있다고 가정하면 정확하게 찾으려는 내용을 지정하는 projection이라는 모든 찾기 유사 명령문에 두 번째 암시 적 매개 변수가 있습니다. 컬렉션의 모든 항목에 대해서만 adresse1을 보여주는 예를 들어

:

db.collection.find({},{"coordonnees.adresse1": 1, "_id":0}) 

adresse1 매개 변수를 반환해야합니다. 어떤 문맥을 표시하고 있는지 정확하게 말할 수는 없었지만 문맥에 관계없이 api가 mongo를 호출하는 것은 매우 간단해야합니다. 이 질문을 잘못 해석했는지 알려주세요. 게시 된 예에서

, 당신은 다음과 같이 뭔가에 찾기 기능을 변경해야하는 데 도움이

Objet.find({params[:id]}, {:fields => [coordonnees.adresse1]}) 

희망을.

+0

내 질문에 관심을 가져 주셔서 감사합니다. show.html.erb에서 어떻게이 db.collection.find ({}, { "adresse1": 1})을 변환 할 수 있습니까? –

+0

@ GrégoireC 현재 show.html.erb를 게시 할 수 있습니까? –

+0

내 게시물을 편집합니다 :) –

0

전체 문서에 적용되는 코드는 무엇입니까? 귀하의 게시물에서 삭제되었습니다.

mongo 셸에서 도트 표기법으로이 작업을 수행 할 수 있습니다. db.collection.find({},{'coordonnees.adresse1':1,'_id':0}) 항상 _id이 기본값으로 반환되기 때문에 '_id':0을 지정해야합니다.

adresse1은 하위 문서이기 때문에 다른 대답은 작동하지 않습니다. coordonnees에 대한 참조를 포함해야합니다.

+0

나는 약간의 오타를 만들었다는 것을 지적 해 주셔서 감사합니다. 그러나 나는 다른 대답의 잽보다 의견으로 더 좋아할 것입니다 ... –

+0

또한 collection.find를 의미하는데, collectionfind는 ' 존재하지 않습니다. 건설적인 비판 요. –

+0

죄송합니다 @SlaterTyranus, 나는 당신의 대답에 대해 논평하는 것을 선호했을 것입니다, 그러나 나는 그렇게하기에 충분한 갈마가 없습니다. 내가 타인을 입력하는 동안 당신은 답을 올렸습니다. 제가 처음에는 그 질문을 완전히 피했을 것입니다. – SuperAce99

0

내 문제의 해결책을 찾았습니다. 해시의 한 요소를 표시하려면, 내가 할 수있는 :

<%= @objet.coordonnees['adresse1'] %> 
0

나는 확실하지 않다 당신이 상호 교환 귀하의 질문에 관계 이름의 단수 및 복수 형태를 사용하는 당신이 embeds_one 또는 embeds_many를 사용하는 경우.

embeds_one 인 경우 @objet.coordonnee은 하나의 문서이므로 반복해서는 안됩니다. 그것은 당신의 관계 이름이 복수해야하는 embeds_many의 경우, 당신이보기에 t.address1을 사용할 수 있어야합니다,

<%= @objet.nom %> 
<%= @objet.coordonnee.address1 %> 

:보기 코드처럼 보일 것입니다.

# model Objet 
embeds_many :coordonnees 

# view 
<%= @objet.nom %> 
<% @objet.coordonnees.each do |t| %> 
    <%= t.address1 %> 
<% end %> 
관련 문제