# Step 1: Define a model with a jsonb column
class YourModel < ActiveRecord::Base
# Assuming you have a jsonb column named 'data'
store_accessor :data, :your_jsonb_field
end
# Step 2: Create a migration to add the jsonb column
class AddYourJsonbFieldToYourModel < ActiveRecord::Migration[6.0]
def change
add_column :your_models, :your_jsonb_field, :jsonb, default: {}
end
end
# Step 3: Update the database schema
rails db:migrate
# Step 4: Create a record with jsonb data
your_model = YourModel.create(your_jsonb_field: { key1: 'value1', key2: 'value2' })
# Step 5: Query records based on jsonb field
# Example 1: Find records where 'your_jsonb_field' has a specific key-value pair
YourModel.where("your_jsonb_field @> ?", { key1: 'value1' }.to_json)
# Example 2: Find records where 'your_jsonb_field' has a specific key
YourModel.where("your_jsonb_field ? :key", key: 'key1')
# Example 3: Find records where 'your_jsonb_field' has a specific value within an array
YourModel.where("your_jsonb_field -> 'key2' ?| ARRAY[:values]", values: ['value2'])
# Example 4: Find records where 'your_jsonb_field' has values matching a pattern
YourModel.where("your_jsonb_field ->> 'key1' ILIKE :pattern", pattern: '%value%')
# Example 5: Find records where 'your_jsonb_field' has a key matching a pattern
YourModel.where("your_jsonb_field -> :key ILIKE :pattern", key: 'key1', pattern: '%value%')
# Step 6: Update jsonb data in a record
your_model.update(your_jsonb_field: { key1: 'new_value' })
# Step 7: Remove a key from jsonb data in a record
your_model.update(your_jsonb_field: your_model.your_jsonb_field.except(:key1))