Я использую Mongoid / MongoDB с Rails и пытаюсь заставить работать отношения многие ко многим.В основном книги и категории, где книги могут быть в нескольких категориях.Я продолжаю получать сообщение об ошибке:
undefined method `metadata' for "4e6aaec8ffb1900c19000002":String
при попытке добавить новую книгу и поместить ее в категории.Вот что я использую для моделей, формы, метода создания и того, что сообщает сервер.
Похоже, он пытается обновить book_ids и cat_ids, но ничего не получает для cat_ids.Я пробовал много разных вещей, но не уверен, как заставить это работать.
Модель книги
class Book
include Mongoid::Document
field :title, :type => String
field :description, :type => String
has_and_belongs_to_many :cats
end
Модель кошки (категории)
class Cat
include Mongoid::Document
field :name, :type => String
field :description, :type => String
has_and_belongs_to_many :books
end
Это из формы, которая генерирует выбор категории и допускает несколько вариантов выбора:
<div class="field">
<%= label_tag "Cats" %><br />
<%= f.collection_select :cats, Cat.all, :id, :name, {}, :multiple => true %>
</div>
Метод создания в контроллере книг:
def create
@book = Book.new(params[:book])
redirect_to(@book, :notice => 'Book was successfully created.')
end
С сервера при отправкеФорма:
Started POST "/books" for 127.0.0.1 at Fri Sep 09 17:30:37 -0700 2011
Processing by BooksController#create as HTML
Parameters: {"commit"=>"Create Book", "authenticity_token"=>"+OAIJM3NRPrUv0u1yfDEkkE2gvPQ7n0P6zPU9ZtqXlk=",
"utf8"=>"✓", "book"=>{"title"=>"The Golf & Tennis Book",
"cats"=>["4e6aaec8ffb1900c19000002", "4e6aaee8ffb1900c19000006"],
"description"=>"Both golf and tennis in this book, so it's in both categories."}}
MONGODB blog_development['system.namespaces'].find({})
MONGODB blog_development['cats'].update({:_id=>{"$in"=>[]}}, {"$pull"=>{"book_ids"=>BSON::ObjectId('4e6aafadffb1900c1900000b')}})
MONGODB blog_development['system.namespaces'].find({})
MONGODB blog_development['books'].update({"_id"=>BSON::ObjectId('4e6aafadffb1900c1900000b')}, {"$set"=>{"cat_ids"=>[]}})
Completed 500 Internal Server Error in 24ms
NoMethodError (undefined method `metadata' for "4e6aaec8ffb1900c19000002":String):
app/controllers/books_controller.rb:46:in `new'
app/controllers/books_controller.rb:46:in `create'