DEV Community

Chaitali Khangar
Chaitali Khangar

Posted on

Dynamic Data Management with jsonb in Rails

Ever feel stuck trying to manage data fields that constantly evolve in your application?

You're certainly not alone.

Many developers face this challenge when building applications that require flexible data structures.

But there's a solution!

PostgreSQL's jsonb data type is here to help.

Let's explore how jsonb helps you to handle dynamic data with ease.

What is jsonb?

  • It's a data type designed specifically to store flexible and dynamic data in the structured format of JSON (JavaScript Object Notation).

  • Think of it as a way to store key-value pairs within your database table, allowing you to define data as your application's needs grow.

Example:

"product_properties": {
  "color": "blue",
  "price": 19.99
}
Enter fullscreen mode Exit fullscreen mode

In this example, product_properties is a jsonb column that stores product details like color and price. You can effortlessly add new properties (like size or material) without modifying your database schema.

Why jsonb over json?

  • Jsonb stores data in a binary format, which results in more efficient storage and faster retrieval.
  • Jsonb support indexing
  • Jsonb provides a larger set of functions and operators for querying and manipulating JSON data.

When to use jsonb?

  1. Flexible Schemas: Ditch rigid table structures! jsonb allows your data to adapt as your application's needs change.

  2. Dynamic Attributes: Need to store user preferences or custom product information? jsonb handles it beautifully.

How to use jsonb?

Here's a quick three-step guide to using jsonb in your Rails project:

  • Step1: Create a Migration Add a jsonb column to your table using a migration. Here's an example using Rails:
add_column :products, :properties, :jsonb, null: false, default: '{}'
Enter fullscreen mode Exit fullscreen mode
  • Step2: Setting Values Treat your jsonb column just like any other object. Assign values using key-value pairs:
product = Product.first
product.properties = { 'color': 'blue', 'price': 19.99 }
product.save
Enter fullscreen mode Exit fullscreen mode
  • Step3: Accessing Values Retrieve data based on keys or values

SQL way

select * from products where (products.properties->>'color')::varchar = 'blue';
Enter fullscreen mode Exit fullscreen mode

Rails Way

Product.where("(products.properties->>'color')::varchar = 'blue'")
Enter fullscreen mode Exit fullscreen mode

Remember: jsonb values can be null.

Use the following to check for existing keys:

SQL way

select * from products where (products.properties->>'color') is not NULL;
Enter fullscreen mode Exit fullscreen mode

Rails Way

Product.where("products.properties->>'color' is not NULL")
Enter fullscreen mode Exit fullscreen mode

Embrace the Power of jsonb!

With jsonb you can say goodbye to those frustrating moments when dealing with dynamic data in your PostgreSQL database.

Now you can store and retrieve information in a structured and flexible way. This gives your application the agility to adapt and grow as your needs evolve.

Till we meet, next time Happy Coding!!

Top comments (0)