我有一个简单的Mongoose模式,其中BlogPosts和Feeds嵌入在这些BlogPosts中。因此每个BlogPost都可以有多个Feed对象。现在我的HTML表单允许我在创建BlogPost时正确保存一个“Feed”,但我希望能够添加多个Feeds。我该如何更改我的HTML /控制器?非常感谢!
web.js
app.post('/blogpost/new', function(req, res){
var post = new BlogPost(req.body.post)
post.feeds.push(req.body.feed);
post.save(function() {
res.redirect('/blogposts');
});
});
/博客帖子/新
<form method="post">
<input type="text" name="blogpost[title]"/>
<textarea name="feed[name]"></textarea>
<textarea name="feed[key]"></textarea>
<textarea name="feed[name]"></textarea>
<textarea name="feed[key]"></textarea>
</form>
模式
var Feed = new Schema({
name : { type: String }
, key : { type: String }
});
var BlogPost = new Schema({
title : { type: String, required: true, index: { unique: true } }
, feeds : [Feed]
});
如何使这个表单在它创建的blogpost对象中存储两个“Feeds”?现在,它会在数据中保存一个Feed,其中包含两个名称值和两个键值。
非常感谢!
答案 0 :(得分:1)
当你做这样的事情时:
<textarea name="feed[name]"></textarea>
<textarea name="feed[key]"></textarea>
<textarea name="feed[name]"></textarea>
<textarea name="feed[key]"></textarea>
您基本上是在说“我需要一个文本框,用于提供Feed的名称,Feed的密钥,Feed的名称,Feed的密钥,这显然是不正确的。如果您执行了feed[0][name]
... feed[1][name]
,那就说”我需要第一个Feed的文本框...我需要第二个Feed的文本框“
由于你打破了父和子,而不是将它们作为子对象处理,你需要将每个都推入blogPost.feeds并保存。
请小心使用这种方法,尤其是在编辑时,因为您只是在现有的Feed数组的顶部添加新对象。