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