Belongs To
In this guide, we'll cover the BelongsTo relationship using CQL's Active Record syntax. We'll start with an Entity-Relationship Diagram (ERD) to illustrate how this relationship works and continuously build upon this diagram as we introduce new relationships in subsequent guides.
What is a BelongsTo Relationship?
BelongsTo Relationship?The BelongsTo association in a database indicates that one entity (a record) refers to another entity by holding a foreign key to that record. For example, a Comment belongs to a Post, and each comment references the Post it is associated with by storing the post_id as a foreign key.
Example Scenario: Posts and Comments
Let's say you have a blog system where:
A Post can have many Comments.
A Comment belongs to one Post.
We'll start by implementing the BelongsTo relationship from the Comment to the Post.
Defining the Schema
We'll first define the posts and comments tables using CQL's schema DSL.
codeAcmeDB = CQL::Schema.define(
:acme_db,
adapter: CQL::Adapter::Postgres,
uri: ENV["DATABASE_URL"]
) do
table :posts do
primary
text :title
text :body
timestamp :published_at
end
table :comments do
primary
bigint :post_id
text :body
end
endposts table: Contains the blog post data (title, body, and published date).
comments table: Contains the comment data and a foreign key
post_idwhich references thepoststable.
Defining the Models
Next, we'll define the Post and Comment structs in CQL.
Post Model
Comment Model
In the Comment model, we specify the belongs_to :post, Post, :post_id association. This links each comment to its parent post. The Comment model must have a post_id attribute (matching the foreign_key option) that stores the id of the associated Post.
Creating and Querying Records
Now that we have defined the Post and Comment models with a belongs_to relationship, let's see how to create and query records in CQL.
Creating Records
Option 1: Create Parent, then Child
Option 2: Create Child and Associated Parent Simultaneously (if needed) If you have a Comment instance and want to create its Post at the same time (less common for belongs_to primary creation flow but possible via association methods):
Note: create_association (like create_post) will create and save the associated object (Post) and set the foreign key on the current object (new_comment). The current object itself (new_comment) still needs to be saved if it's new.
Option 3: Build Associated Parent (without saving parent yet)
Querying the Associated Post from a Comment
Once we have a comment, we can retrieve the associated post using the belongs_to association.
In this example, comment.post will fetch the Post associated with that Comment.
Summary
In this guide, we've covered the basics of the belongs_to relationship in CQL. We:
Defined the
PostandCommenttables in the schema.Created the corresponding models, specifying the
belongs_torelationship in theCommentmodel.Showed how to create and query records using the
belongs_toassociation.
Next Steps
In the next guides, we'll build on this ERD and introduce other types of relationships like has_one, has_many, and many_to_many. Stay tuned for the next part where we'll cover the has_many relationship!
Feel free to play around with this setup and extend the models or experiment with more queries to familiarize yourself with CQL's Active Record capabilities.
Last updated
Was this helpful?