Associations are the connections between the two models of Active Record. Without associations, programmers would have to write more code to do the same thing that can be done with less code with associations. We will be discussing the two types of Active Record Associations. They are what structure our code to make things not only simple to write but also simple to read. The two types are:
- One to Many
- Many to Many
The first one that we will be discussing is the One to Many association. This one is the simpler one of the two. In a one to many relationship, the first item has many relationships to the other item but not the other way around.
An example of this would be the relation between games and reviews. A game can have many reviews but a review cannot have many games. It would belong to a specific game. For the relationship of review to game, we would use
belongs_to and for game to review, we would use
has_many. This relationship is shown in Active Record like this:
class Game < ActiveRecord::Base has_many :reviews end class Review < ActiveRecord::Base belongs_to :game end
(Note: reviews for
has_many is plural and game for
belongs_to is singular because, as described before, a game can have many reviews but a review has one game.)
The second and last one we will discuss is the Many to Many association. This one is a little more complicated, as a third model is included as well. In a many to many relationship, both the first item and the second item have many relationships with each other. To help keep track, a third item in introduced, which is a merger between the two.
An example of this would be the relation between games and users. A game
has_many users and a user also
has_many games. To help keep track, we will introduce the third one, which will be reviews, as a merger between the two.
Now we can say that a game
has_many reviews, a user
has_many reviews, but a review
belongs_to a game and a user. For the relationship between a game and review AND user and review, we will use
has_many. For the relationship between review and user AND review and user, we will use
belongs_to. This relationship will be shown like this:
class Game < ActiveRecord::Base has_many :reviews has_many :users, through: :reviews end class User < ActiveRecord::Base has_many :reviews has_many :games, through: :reviews end class Review < ActiveRecord::Base belongs_to :game belongs_to :user end
(Note: For the second
has_many for Game and User, we have added a
through: because Review is the merger that connects them to each other!)
In conclusion, there are two types of Active Record Associations that are discussed. The first one is the One to Many association and the second one is the Many to Many association. One to Many is when first item
has_many of the second item but the second only has one of the first.To show this, a
belongs_to is used for one and a
has_many for the other. This shows that the Many to Many is when the first item
has_many of the second and vice versa. To keep track, there is a third item introduced which
belongs_to both of the items. To show this relationship, a
has_many: , through: is used to show the relationship between the three!