1

Mongoose で埋め込みドキュメントを作成するために頭を悩ませています。フォームを送信すると、次のエラーが表示されます。

500 CastError: undefined_method へのキャストが値「ここにコメントが入ります」で失敗しました

コード:

index.js

var db = require( 'mongoose' );
var Todo = db.model( 'Todo' );

exports.create = function(req, res, next){
  new Todo({
      title      : req.body.title,
      content    : req.body.content,
      comments   : req.body.comments,
  }).save(function(err, todo, count){
    if( err ) return next( err );
    res.redirect('/');
  });
};

db.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

// recursive embedded-document schema
var commentSchema = new Schema();

commentSchema.add({ 
    content  : String   
  , comments : [Comment]
});

var Comment = mongoose.model('Comment', commentSchema);

var todoSchema = new Schema({
    title      : { type: String, required: true }
  , content    : String
  , comments   : [Comment]
});

var Todo = mongoose.model('Todo', todoSchema);

ジェイドフォーム

form(action="/create", method="post", accept-charset="utf-8")
  input.inputs(type="text", name="title")
  input.inputs(type="text", name="content")
  input.inputs(type="text", name="comments")
input(type="submit", value="save")
4

2 に答える 2

0

マングース モデルがスキーマに関与することはありません。基本的なデータ型とマングース スキーマのみ。再帰的なコメント スキーマに落とし穴があるかどうかはわかりませんが、次のようなことを試してください。

var commentSchema = new Schema();

commentSchema.add({ 
  , content  : String   
  , comments : [commentSchema]
});

var todoSchema = new Schema({
  , title      : { type: String, required: true }
  , content    : String
  , comments   : [commentSchema]
});

var Todo = mongoose.model('Todo', todoSchema);
var Comment = mongoose.model('Comment', commentSchema);
于 2013-07-02T06:10:57.183 に答える