In this blog, I want to take a quick look at a very simple thing we can do to verify our associations have been set up properly at the start of a Rails project using some ActiveRecord magic.
Once you have an idea of what your database table relationships will look like and have them defined in your project, it's a great idea to quickly create some dummy data in the rails console to verify your associations are working how you want them to.
I was building an exercise journal and my relationships were as follows:
class Workout < ApplicationRecord ... has_many :exercises has_many :users, through: :exercises ... class User < ApplicationRecord ... has_many :workouts, through: :exercises has_many :exercises ... class Exercise < ApplicationRecord ... belongs_to :workout belongs_to :user ...
We will be verifying these associations. So we head into the terminal and play in the Rails console
rails c to create a couple of users:
c = User.create(name: "Stan", email: "firstname.lastname@example.org", password: "password")
c is arbitrary here and is used to call the newly created user, if we do this we can confirm that the new user has been assigned a
user_id of 1, meaning it was successfully saved to the DB. We should be able to see the attributes that were passed in as well (
password). Repeat the process to create a second user which should save with a
user_id of 2. Great! We’ve got our users.
Now on to workouts. It’s important to create the users and workouts first, given that our joins table is the
exercises table. This is because each exercise created will need to be associated with a user and a workout - the
exercises table will "join" the
workouts tables. You can see this in the relationships code snippet provided above.
c = Workout.create(name: "HIT", notes: "No rest")
Very similar to the users example. This should save with a
workout_id of 1. You can confirm this by calling
c in the terminal. Make one more workout and then it’s time to create some exercises:
c = Exercise.create(name: "Burpee", user_id: 1, workout_id: 1)
Above I assigned foreign keys to the exercise object and then checked to see if it saved to the DB by calling
c in the terminal.
c = Exercise.create(name: "Pushup", user_id: 2, workout_id: 1) c = Exercise.create(name: "Situp", user_id: 1, workout_id: 2)
Now we can call
Workout.all.last.exercises for example.
I hope this helps you get started. It’s important to verify these relationships are working correctly before getting too deep into your project.