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?

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
end
  • posts table: Contains the blog post data (title, body, and published date).

  • comments table: Contains the comment data and a foreign key post_id which references the posts table.


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 Post and Comment tables in the schema.

  • Created the corresponding models, specifying the belongs_to relationship in the Comment model.

  • Showed how to create and query records using the belongs_to association.

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?