A Single-Page App
with Vue.js and
a design and code exploration
Built with Vue 2.5 and Rails 6
Single-page applications (SPAs) are part of the landscape of modern web app development.
So what does it take to put together an SPA using:
Ruby on Rails as the backend API and
Vue.js and Vuex on the frontend?
And how would you design it in a pragmatic, straightforward way?
Find out as we unpack a full-stack app layer by layer!
“I love the Unpacked format with focus on design decisions and implementation details over pure code-writing. You provide the most useful technical training that I've seen on the web!” Wayne Hiner
“I loved seeing everything working together, and being introduced to Vuex and Axios in action.” Christel Trutmann
“I love seeing the dissection of a full architecture that works.” Magnus Rembold
“It's a great course and a far more efficient approach for diving into a new topic.” Frank Betorina
Start With a Complete App and Break It Down
Get confident with modern single-page web app development.
This tutorial unpacks what it takes to combine a Vue.js frontend with a backend Rails API. Along the way we address many common design decisions, including:
- How is the code of the two applications organized and structured?
- What does a JSON API design look like?
- When and where are single-file Vue components used? And how is data shared between them?
- What role does a router play in a single-page app?
- When should Vuex be used to manage client-side state?
- How does authentication work and remain secure between two applications?
We start with the completed app and unpack it layer by layer, answering these questions and much more. You'll come away understanding how everything works together in harmony.
The Application We Unpack
How It's Designed
No need to piece together solutions yourself. Use this full-stack application as a springboard for creating your own apps!
14 Concise, Tightly-Edited Videos
Just the way you like 'em: easy to digest, straight to the point, paced just right.
1 Introduction and Setup
Welcome! Before diving into our Vue.js + Rails app let's make sure you have your development environment set up so you can follow along as we explore the code and design.
2 App Overview
The web application we unpack (Fishub) lets anglers track which fishing baits are in their tackle box along with catches made on those baits. We start with a quick walk-through of the app's various features.
3 Design Overview
Before cracking open the code, we get a lay of the land. Fishub is designed as two distinct applications: the frontend is a single-page Vue.js app and the backend API is a Rails app. How they work together is what this video series is all about!
4 Vue App Overview
Now that we have the big picture, we open the lid on the Vue.js app to see how the various components, router, and Vuex store are all knitted together when the application mounts.
5 Rails App Overview
Looking inside the backend Rails app we see the familiar structure of models, views, and controllers as well as the API endpoints that serve up JSON.
6 End-to-End Feature: Fetch Baits
By taking an end-to-end walkthrough of how the Baits page gets rendered, we get an introduction to how the Vue app makes a request to the API and then consumes the returned JSON.
7 Client-Side State Management (Vuex)
Multiple components in our Vue app need to share state, and at times, update that state. To do this efficiently, we call upon Vuex to keep everything in sync. How does the Vuex store do that? And when does it make sense to use Vuex? Find out.
8 End-to-End Feature: Fetch Tackle Box Items
With a Vuex store, multiple Vue components, and the Rails API firmly in place, how does everything work together? We dive deep into the code with an end-to-end exploration of how tackle box items are requested, received, and rendered.
9 End-to-End Feature: Add a Tackle Box Item
With Vue, Vuex, and the Rails API knitted together for making GET requests, we now turn our attention to a POST request. An empty tackle box catches no fish, so we dispatch a Vuex action to add a bait to the tackle box. We explore that feature from the frontend to the backend.
10 Render The Tackle Box
With our lucky lures now in our tackle box, it's time to look at the second “page” of our application: the tackle box page. By way of various components, this page renders the items in the angler's tackle box and, more interestingly, the catches made on those baits.
11 End-to-End Feature: Create A Catch
Next up we log a catch, which leads to a question: How does a child Vue component communicate with its parent component? By tracing the code end-to-end we learn how to use custom Vue events.
Deciding how to handle authentication for Fishub was a major design decision. How would the Vue app track who's signed in and then communicate that to the API when making authenticated requests? And how could we address Cross-Site Scripting (XSS) attacks and Cross-Site Request Forgery (CSRF)? It turns out that relying on tried-and-true Rails session cookies proved to be great approach!
13 End-to-End Feature: Sign In
14 End-to-End Feature: Authenticated Requests
We're in the thick of it now! The Vue app knows who's signed in and is ready to make authenticated requests. And that's where two cookies come into play. We also want to enable Cross-Original Resource Sharing (CORS) so our frontend can access resources on our backend.
What Does Unpacked Mean?
A step-by-step format for introductory courses is great for learning syntax, vocabulary, and basic concepts. But once you've got the fundamentals down, as an experienced developer your time is better spent:
dissecting a full-stack application layer by layer without the tedious typing of all the code
focusing on the design, architecture, and actual implementation of a solid application
diving deep into the interesting parts of a complete, feature-rich application
We unpack apps in our Studio so you can put them together in yours!
Here's What You Get:
Streamable and downloadable, DRM-free videos on any device. English subtitles on each video.
Installation instructions, supplemental footnotes, alternate design techniques, and handy tips and tricks.
Of course, you also get all the source code for the completed app.
No monthly subscription or time limit. Start when you want and repeat as often as you like!
For Experienced Developers
You've got the fundamentals down and want to take the next step!
This course assumes you're already familiar with Vue.js and Rails and you've fetched data from an API before. Now you want to explore how all those things fit together in a full-stack app.
If you're new to Vue.js, we recommend reading through the Essentials and Components In-Depth sections of the official Vue Guide. This beginner-friendly guide covers all the aspects of Vue.js we use in the videos.
If you're new to Rails, we recommend starting with our popular introductory Rails course where you'll learn all the fundamentals by building a full-featured application from the ground up.
Created with 💛 by Mike and Nicole Clark
Hi, we'd be delighted to have you along as we create stuff in the Studio!
You may be familiar with our step-by-step courses on Ruby, Rails, Elixir, and Elm. But what happens when you smash (pragmatically, of course) different languages, technologies, and frameworks together? Well, working at the system level gives you the power to create some very cool applications! We're excited to unpack these kinds of applications with you in the Studio. We hope you enjoy it!
Experienced devs love the unpacked format!
Here's what some of them have to say…
“I really like how they go back and forth between the code, browser view, and Vue devtools. It makes the material much more clear for me and helps me to see how the different pieces play together.” Anne Richardson
“I like that there is a working app throughout the course. Vue and Rails are hot topics for me now and I love seeing the dissection of a full architecture that works.” Magnus Rembold
“The explanations and graphics for session cookies, CSRF tokens, and CORS were excellent. Those complex topics were explained very clearly.” Wilfrid Landry
“I'm making much faster progress with my project already, now that I've seen your great example for organizing Vue with Rails! Most tutorials are only one-feature deep which left me with a lot of questions. I loved seeing everything working together, and being introduced to Vuex and Axios in action.” Christel Trutmann
“I really liked the walkthrough and clearly seeing how the two apps, frontend Vue and backend API Rails, were stuck together. It's a great course and a far more efficient approach for diving into a new topic. I did some React courses before, but had never tried Vue. In taking this course, I found out I like Vue.” Frank Betorina
“The visuals and end-to-end explanations in this course were excellent!” Brian Ball
“I love the Unpacked format with focus on design decisions and implementation details over pure code-writing. It's perfect for intermediate and above developers who want to understand the architecture and implementation without the tedium of watching instructors type out all the code. It's an excellent way to learn to do it yourself with great examples of how to go about it. You provide the most useful technical training that I've seen on the web!” Wayne Hiner