0

私は MongoDB と MongoID の初心者です。足場を2つ作りました

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:

オブジェドキュメント

今、このドキュメントのフィールドだけを表示しようとしていますが、うまくいきadresse1ません。これを行う埋め込みドキュメント全体のみを表示できます。

私がする時 :

<%= @objet.coordonnees.adresse1 %>  

このエラーが発生します:

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

どうやってやるの ?

編集

そうすることで、すべての要素「Adresse1、adresse2、ville、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 %>

しかし、私の質問は次のとおりです。それらの1つだけを表示するにはどうすればよいですか? ville、または code_postal または address1... など?

4

4 に答える 4

0

質問で関係名の単数形と複数形を同じ意味で使用しているのか、embeds_oneそれとも使用しているのかはわかりません。embeds_many

それが問題である場合、それは単一のドキュメントであるため、embeds_one反復してはならないということです。@objet.coordonneeビュー コードは次のようになります。

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

の場合embeds_many、リレーション名は複数形である必要があり、ビューで使用できるはずですt.address1

# model Objet
embeds_many :coordonnees

# view
<%= @objet.nom %>
<% @objet.coordonnees.each do |t|  %>  
  <%= t.address1 %>
<% end %>
于 2013-07-04T00:37:28.307 に答える
0

MongoID についてはあまり詳しくありませんが、mongo を直接呼び出すことができると仮定すると、すべての検索に似たステートメントには、projection正確に何を返したいかを指定する a という 2 つ目の暗黙のパラメーターがあります。

たとえばadresse1、コレクション内のすべてのアイテムのみを表示します。

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

パラメータのみを返す必要がありadresse1ます。オブジェクトを表示しているコンテキストを正確に伝えることはできませんでしたが、コンテキストに関係なく、mongo への API 呼び出しはかなり簡単に行うことができます。ただし、この質問を誤解している場合はお知らせください。

投稿された例では、検索機能を次のように変更する必要があります。

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

それが役立つことを願っています。

于 2013-07-01T20:41:16.667 に答える
0

ドキュメント全体で機能するコードは何ですか? あなたの投稿から削除されました。

mongo シェルでは、ドット表記でこれを行うことができます。デフォルトで常に返されるためdb.collection.find({},{'coordonnees.adresse1':1,'_id':0})、を指定する必要があります。'_id':0_id

サブドキュメントであるため、他の答えは機能しませんadresse1。への参照を含める必要がありますcoordonnees

于 2013-07-01T20:44:30.293 に答える