Compare commits

...

4 Commits

@ -1,6 +1,7 @@
var express = require('express'); var express = require('express');
var router = express.Router(); var router = express.Router();
var Article = require('../models/articles.js'); var Article = require('../models/articles.js');
var Author = require('../models/authors.js');
router.get('/', function(req, res){ router.get('/', function(req, res){
Article.find({}, function(err, foundArticles){ Article.find({}, function(err, foundArticles){
@ -29,8 +30,14 @@ router.get('/:id', function(req,res){
}); });
router.delete('/: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(){ Article.findByIdAndRemove(req.params.id, function(){
res.redirect('/articles'); res.redirect('/articles');
})
}); });
}); });
@ -43,10 +50,17 @@ router.get('/:id/edit', function(req, res){
}); });
router.put('/:id', 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'); res.redirect('/articles');
}); });
}); });
});
module.exports = router; module.exports = router;

@ -1,5 +1,6 @@
var express = require('express'); var express = require('express');
var Author = require('../models/authors.js'); var Author = require('../models/authors.js');
var Article = require('../models/articles.js');
var router = express.Router(); var router = express.Router();
router.get('/', function(req, res){ router.get('/', function(req, res){
@ -41,11 +42,34 @@ router.put('/:id', function(req, res){
}); });
router.get('/:id/edit', function(req, res){ router.get('/:id/edit', function(req, res){
Article.find({}, function(err, foundArticles){
Author.findById(req.params.id, function(err, foundAuthor){ Author.findById(req.params.id, function(err, foundAuthor){
res.render('authors/edit.ejs', { 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');
})
});
}); });
module.exports = router; module.exports = router;

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

@ -13,17 +13,46 @@
<a href="/">Home</a> <a href="/">Home</a>
</li> </li>
<li> <li>
<a href="/authors">Authors Index</a> <a href="/authors/<%=author._id%>"><%=author.name%>'s Show Page</a>
</li> </li>
</ul> </ul>
</nav> </nav>
</header> </header>
<main> <main>
<section>
<h2>Author Attributes:</h2> <h2>Author Attributes:</h2>
<form action="/authors/<%=author._id%>?_method=PUT" method="post"> <form action="/authors/<%=author._id%>?_method=PUT" method="post">
<input type="text" name="name" value="<%=author.name%>"/><br/> <input type="text" name="name" value="<%=author.name%>"/><br/>
<input type="submit" value="Update Author"/> <input type="submit" value="Update Author"/>
</form> </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> </main>
</body> </body>
</html> </html>

@ -25,6 +25,14 @@
<li>Name: <%=author.name%></li> <li>Name: <%=author.name%></li>
</ul> </ul>
</section> </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> <section>
<a href="/authors/<%=author._id%>/edit">Edit</a> <a href="/authors/<%=author._id%>/edit">Edit</a>
</section> </section>

Loading…
Cancel
Save