in query postgres jsonb rails

# 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))