2011-09-10 18 views
1

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' 
+0

[OK]を、私は恥ずかしいです。私はcollection_selectの最初の引数のcat_idsを定義する必要があることを知っています(私が行っていたようにcatは使用しません): <%= f.collection_select 'cat_ids'、Cat.all、... – Frank

答えて

0

これは無効

book.update_attributes({:cats => [ cat.id ]}) 

あるこの

book.update_attributes({:cat_ids => [ cat.id ]}) 

または

book.update_attributes({:cats => [ cat ]}) 
する必要があります
関連する問題