2010-11-09 4 views
1

Je travaille sur une application To-Do pour m'entraîner avec Rails3 et MongoDB.Impossible d'afficher le champ du document mongo référencé dans rails3

J'ai un article qui était un tag et un tag aura beaucoup d'éléments qui lui sont associés.

Mon problème: Le fichier show.html.erb ne souhaite pas afficher le nom du tag.

# models/item.rb 
class Item 
include Mongoid::Document 
field :name 
field :completed, :type => Boolean 
referenced_in :tag 
end 

# models/tag.rb 
class Tag 
include Mongoid::Document 
field :name 
key :name 
references_many :items 
end 

# items_controller.rb 
def show 
    @item = Item.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @item } 
    end 
end 

<!-- items/show.html.erb --> 
<p>Name: <%= @item.name %></p> 
<p>Completed: <%= @item.completed %></p> 
<p>Tag: <%= @item.tag.name %></p> 

La troisième ou la dernière ligne du fichier show est ce qui pose problème. L'erreur est ci-dessous:

Document non trouvé pour la classe Tag avec id (s) 4cd75765f5c4932f19000002.

si je remplace la ligne en question avec la ligne ci-dessous l'id de la balise affichée est correcte (mais je veux que le nom de la balise évidemment)

<p>Tag: <%= @item.tag_id %></p> 
+0

Qu'est-ce que vous obtenez de '@ item.tag'? –

+0

même chose que @ item.tag.name –

Répondre

1

La classe Tag a deux attributs nommé « nom » . Essayez de supprimer key :name

+1

vous étiez correct mais je pense pour la mauvaise raison. enlever la clé travaillée. pense que cela a fonctionné parce que l'attribut clé est utilisé de sorte que le nom est utilisé pour identifier l'étiquette dans l'adresse. donc il cherchait le nom de l'étiquette en utilisant le tag id. –

+0

Après avoir utilisé un peu la touche, j'ai réalisé que vous répondiez mieux à votre propre question. La balise référencée avait déjà été écrite dans la base de données en utilisant ObjectId comme clé. Je suis sûr que vous avez depuis découvert qu'une fois que vous avez écrit de nouveaux enregistrements dans la base de données avec 'key: name', vous avez obtenu le résultat attendu. –

Questions connexes