Невозможно отобразить поле ссылочного документа монго в rails3

Я работаю над приложением To-Do, чтобы попрактиковаться в Rails3 и MongoDB.

У меня есть элемент, который был тегом, и с тегом будет связано много элементов.

Моя проблема: show.html.erb не хочет отображать имя тега.

# 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>

Третья или ключевая строка файла шоу - это то, что вызывает у меня проблемы. Ошибка ниже:

Не найден документ для тега класса с идентификаторами 4cd75765f5c4932f19000002.

если я заменю рассматриваемую строку строкой ниже, то отобразится правильный идентификатор тега (однако я, очевидно, хочу имя тега)

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

person Berek Bryan    schedule 09.11.2010    source источник
comment
Что вы получаете от @item.tag ?   -  person Joshua Partogi    schedule 10.11.2010


Ответы (1)


Класс Tag имеет два атрибута с именем name. Попробуйте удалить key :name

person Jason Prins    schedule 09.11.2010
comment
вы были правы, но я думаю, что по неправильной причине. удаление ключа помогло. думаю, это сработало, потому что атрибут ключа используется, поэтому имя используется для идентификации тега в адресе. поэтому он искал имя тега, используя идентификатор тега. - person Berek Bryan; 10.11.2010
comment
Немного попользовавшись ключом, я понял, что вы лучше ответили на свой вопрос. Тег, на который вы ссылались, уже был записан в базу данных с использованием ObjectId в качестве ключа. Я уверен, что с тех пор вы обнаружили, что как только вы записали новые записи в базу данных с помощью 'key :name', вы получили ожидаемый результат. - person Jason Prins; 15.12.2010