Ich arbeite mit einem Formular und zwei Datenbanksammlungen. Wenn das Formular übergeben wird, werden alle Daten aus den Eingabeelementen in der entsprechenden Sammlung gespeichert. Dies ist ziemlich einfach zu tun, Eingabeattribute wie blogs[content]
zu setzen und dann dieses Objekt in der Route zu verwenden, die die Daten mit .create()
an die Datenbank sendet.Mongo-Referenzen mit HTML-Formularen bearbeiten
Ich habe jedoch keine Ahnung, wie dies zu tun ist, wenn eine Sammlung einen Verweis auf einen anderen hat.
Lassen Sie uns sagen, ich habe die folgenden Sammlungen:
var Blog = new mongoose.Schema({
content: String,
authors: [{
type: mongoose.Schema.Types.ObjectId,
ref: "Author"
}]
});
var Author = new mongoose.Schema({
name: String
});
Ich weiß, dass Sie die Daten mit der push()
Funktion direkt von den Routen verbinden kann, aber ich will es aus der Form selbst tun. Wie kann ich Daten an die authors
Referenz in Blog
von der form
senden? Ich habe versucht, den Namen der Eingabe als blogs[authors]
, aber das funktioniert nicht, raten ist nicht so einfach.
Ist es überhaupt möglich? Oder ist das Schieben von den Routen die einzige Option?
Vielen Dank im Voraus!
EDIT: Ich wurde für die Routen-Code gefragt so ist es hier
app.get("/form", function(req, res){
Author.find({}, function(err, authors) {
if(err)
console.log(err);
else
res.render("form.ejs", {authors: authors});
});
});
// form.ejs sends a POST request to /blogs
app.post("/blogs", function(req, res){
Blog.create(req.body.blogs, function(err, newBlog){
if(err)
console.log(err);
else
res.redirect("/form");
});
});
Das HTML-Formular so etwas wie dies würde:
<form action="/blogs" method="POST">
<select name=" HERE GOES THE name ATTRIBUTE I DON'T KNOW HOW TO SET ">
<option value="0" selected>Authors</option>
<% authors.forEach(function(author){ %>
<option value="<%= author._id %>"><%= author.name %></option>
<% }) %>
</select>
</form>