Compare commits

...

4 Commits

@ -1,6 +1,7 @@
var express = require('express');
var router = express.Router();
var Article = require('../models/articles.js');
var Author = require('../models/authors.js');
router.get('/', function(req, res){
Article.find({}, function(err, foundArticles){
@ -29,8 +30,14 @@ router.get('/:id', function(req,res){
});
router.delete('/:id', function(req, res){
Author.find({'articles._id':req.params.id}, function(err, foundAuthors){
for(var i = 0; i < foundAuthors.length; i++){
foundAuthors[i].articles.id(req.params.id).remove();
foundAuthors[i].save();
}
Article.findByIdAndRemove(req.params.id, function(){
res.redirect('/articles');
})
});
});
@ -43,9 +50,16 @@ router.get('/:id/edit', function(req, res){
});
router.put('/:id', function(req, res){
Article.findByIdAndUpdate(req.params.id, req.body, function(){
Article.findByIdAndUpdate(req.params.id, req.body, {new:true}, function(err, updatedArticle){
Author.find({'articles._id':req.params.id}, function(err, foundAuthors){
for(var i = 0; i < foundAuthors.length; i++){
foundAuthors[i].articles.id(req.params.id).remove();
foundAuthors[i].articles.push(updatedArticle);
foundAuthors[i].save();
}
res.redirect('/articles');
});
});
});

@ -1,5 +1,6 @@
var express = require('express');
var Author = require('../models/authors.js');
var Article = require('../models/articles.js');
var router = express.Router();
router.get('/', function(req, res){
@ -41,10 +42,33 @@ router.put('/:id', function(req, res){
});
router.get('/:id/edit', function(req, res){
Article.find({}, function(err, foundArticles){
Author.findById(req.params.id, function(err, foundAuthor){
res.render('authors/edit.ejs', {
author: foundAuthor
author: foundAuthor,
articles: foundArticles
});
});
});
});
router.post('/:id/articles', function(req, res){
Article.findById(req.body.articleId, function(err, foundArticle){
Author.findById(req.params.id, function(err, foundAuthor){
foundAuthor.articles.push(foundArticle);
foundAuthor.save(function(){
res.redirect('/authors/' + req.params.id + '/edit');
})
});
});
});
router.delete('/:authorId/articles/:articleId', function(req, res){
Author.findById(req.params.authorId, function(err, foundAuthor){
foundAuthor.articles.id(req.params.articleId).remove();
foundAuthor.save(function(){
res.redirect('/authors/' + req.params.authorId + '/edit');
})
});
});

@ -1,7 +1,9 @@
var mongoose = require('mongoose');
var Article = require('./articles.js');
var authorSchema = mongoose.Schema({
name: String
name: String,
articles: [Article.schema]
});
var author = mongoose.model('Author', authorSchema);

@ -13,17 +13,46 @@
<a href="/">Home</a>
</li>
<li>
<a href="/authors">Authors Index</a>
<a href="/authors/<%=author._id%>"><%=author.name%>'s Show Page</a>
</li>
</ul>
</nav>
</header>
<main>
<section>
<h2>Author Attributes:</h2>
<form action="/authors/<%=author._id%>?_method=PUT" method="post">
<input type="text" name="name" value="<%=author.name%>"/><br/>
<input type="submit" value="Update Author"/>
</form>
</section>
<section>
<h2>Articles Written By This Author</h2>
<ul>
<% for(var i = 0; i < author.articles.length; i++) { %>
<li>
<%=author.articles[i].title%>
<form action="/authors/<%=author._id%>/articles/<%=author.articles[i]._id%>?_method=DELETE" method="post">
<input type="submit" value="Remove This Author's Attribution from This Article" />
</form>
</li>
<% } %>
</ul>
</section>
<section>
<h2>Articles Not Written By This Author</h2>
<ul>
<% for(var i = 0; i < articles.length; i++) { %>
<li>
<%=articles[i].title%>
<form action="/authors/<%=author._id%>/articles" method="post">
<input type="hidden" name="articleId" value="<%=articles[i]._id%>">
<input type="submit" value="Attribute Article To This Author" />
</form>
</li>
<% } %>
</ul>
</section>
</main>
</body>
</html>

@ -25,6 +25,14 @@
<li>Name: <%=author.name%></li>
</ul>
</section>
<section>
<h2>Articles Written By This Author</h2>
<ul>
<% for(var i = 0; i < author.articles.length; i++) { %>
<li><%=author.articles[i].title%></li>
<% } %>
</ul>
</section>
<section>
<a href="/authors/<%=author._id%>/edit">Edit</a>
</section>

Loading…
Cancel
Save