---
title: OptimizelyUserContext for the Ruby SDK
slug: feature-experimentation/docs/optimizelyusercontext-ruby
docTags: 
createdAt: 2026-08-05T20:39:54.000Z
---

The `OptimizelyUserContext` object lets you make flag decisions and track events for a user context that you created using the [Create User Context](docId\:EZ82PrPXF05kJvmd7OoxE) method.

Also, if you have [Real-Time Audiences for Feature Experimentation](docId:6UBBxxRv331nBIVZ2lun8) configured between Optimizely Data Platform (ODP) and Optimizely Feature Experimentation, you can evaluate if your user would qualify for a real-time audience segment.

## OptimizelyUserContext minimum SDK version

OptimizelyUserContext is supported on SDK v3.8 and higher.

### Forced decision methods minimum SDK version

`set_forced_decision()`, `get_forced_decision()`, `remove_forced_decision()` and `remove_all_forced_decisions()` methods are supported on v3.10.0 and higher.

### Real-Time Audiences for Feature Experimentation minimum SDK version

`fetch_qualified_segments()` and `qualified_for?()` methods are supported on v5.0.0 and higher.

## `OptimizelyUserContext` definition

The following code shows the object definition for `OptimizelyUserContext`:

```ruby
module Optimizely
  class OptimizelyUserContext

    attr_reader :user_id
    
    # Create an instance of the Optimizely User Context. Pass in user id and optionally user attributes 
    def initialize(optimizely_client, user_id, user_attributes)

    # set an attribute for the user
    def set_attribute(attribute_key, attribute_value)
    
    # get attributes for the user
    def user_attributes

    # make a decision about which flag variation the user buckets into for the flag key 
    def decide(key, options = nil)

    # make decisions about which flag variations the user buckets into for flag keys 
    def decide_for_keys(keys, options = nil)

    # make decisions about which flag variations the user buckets into for all flags 
    def decide_all(options = nil)

    # track user event
    def track_event(event_key, event_tags = nil)
      
    # OptimizelyDecisionContext
    OptimizelyDecisionContext = Struct.new(:flag_key, :rule_key)
      
    # OptimizelyForcedDecision
    OptimizelyForcedDecision = Struct.new(:variation_key)

    # Sets the forced decision (variation_key) for a given decision context
    def set_forced_decision(context, decision)

    # Returns the forced decision for a given decision context
    def get_forced_decision(context)

    # Removes the forced decision for a given decision context
    def remove_forced_decision(context)

    # Removes all forced decisions bound to this user context
    def remove_all_forced_decisions
      
    # The following methods require Real-Time Audiences for Feature Experimentation 
    # See note following the code sample.

    # An array of audience segment names that the user is qualified for. 
    # The result of **fetch_qualified_segments()** is saved here. 
    # Can be nil if not properly updated with fetch_qualified_segments(). 
    # 
    # You can read and write directly to the qualified segments array. 
    # This lets you bypass the remote fetching process from ODP 
    # or for utilizing your own fetching service.   
    def qualified_segments 
      
    # Fetch all qualified segments for the user context.
    # If no callback is provided, this method fetches the qualified segments
    # and return a boolean signifying success.
    #
    # If a callback is provided, the method fetches segments in a separate thread, 
    # invoke the provided callback when results are available, and return the thread handle. 
    def fetch_qualified_segments(options, &block) 
 
    # Check is the user qualified for the given segment. 
    def qualified_for?(segment)

  end
end
```

:::hint{type="info"}
**Note**
You must first configure [Real-Time Audiences for Feature Experimentation](docId:6UBBxxRv331nBIVZ2lun8) to run the`qualified_segments()`, `fetch_qualified_segments()`, and `qualified_for?()` methods.
:::

## Properties

The following table shows attributes for the `OptimizelyUserContext` object:

| Attribute                 | Type   | Comment                                                                                                                                                                                                                                        |
| ------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| \`user\_id\`              | String | The ID of the user                                                                                                                                                                                                                             |
| \`attributes\` (optional) | Map    | A map of custom key-value pairs specifying attributes for the user that are used for \[audience targeting]\(https\://support.optimizely.com/hc/en-us/articles/38683417490957). You can pass the map with the user ID when you create the user. |

## Methods

The following table shows methods for the `OptimizelyUserContext` object:

| Method                              | Comment                                                                                                                                                                                                                                                                                                                                           |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| \`set\_attribute\`                  | Pass a custom user attribute as a key-value pair to the user context.                                                                                                                                                                                                                                                                             |
| \`decide\`                          | Returns a decision result for a flag key for a user in an OptimizelyDecision object, which contains all data required to deliver the flag rule. See \[Decide methods]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/decide-methods-ruby#example-decide)                                                                   |
| \`decide\_for\_keys\`               | Returns a map of flag decisions for specified flag keys. See \[Decide methods]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/decide-methods-ruby#decide-for-keys)                                                                                                                                                         |
| \`decide\_all\`                     | Returns decisions for all active (unarchived) flags for a user. See \[Decide methods]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/decide-methods-ruby#example-decideall)                                                                                                                                                |
| \`track\_event\`                    | Tracks a conversion event for a user (an action a user takes) and logs an error message if the specified event key does not match any existing events. See \[Track Event]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/track-event-ruby)                                                                                 |
| \`set\_forced\_decision\`           | Forces a user into a specific variation. See \[Set Forced Decision]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-ruby#set-forced-decision-method---set\_forced\_decision)                                                                                                                        |
| \`get\_forced\_decision\`           | Returns what variation the user was forced into. See \[Get Forced Decision]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-ruby#get-forced-decision-method---get\_forced\_decision)                                                                                                                |
| \`remove\_forced\_decision\`        | Removes a user from a specific forced variation. See \[Remove Forced Decision]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-ruby#remove-forced-decision-method---remove\_forced\_decision)                                                                                                       |
| \`remove\_all\_forced\_decisions\`  | Removes a user from all forced variations. See \[Remove All Forced Decisions]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/forced-decision-methods-ruby#remove-all-forced-decisions-method---remove\_all\_forced\_decisions)                                                                                             |
| \`fetch\_qualified\_segments\` \*\* | Fetch all Optimizely Data Platform (ODP) real-time audiences that the user context qualified for. See \[Real-Time Audiences for Feature Experimentation segment qualification methods]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/real-time-audiences-for-feature-experimentation-segment-qualification-methods-ruby). |
| \`qualified\_for?\` \*\*            | Check if the user context qualified for a given ODP real-time audience. See \[Real-Time Audiences for Feature Experimentation segment qualification methods]\(https\://docs.developers.optimizely.com/feature-experimentation/docs/real-time-audiences-for-feature-experimentation-segment-qualification-methods-ruby).                           |

\*\* Requires [Real-Time Audiences for Feature Experimentation](docId:6UBBxxRv331nBIVZ2lun8).

## See Also

[Create User Context](docId\:EZ82PrPXF05kJvmd7OoxE)

## Source files

The language and platform source files containing the implementation for Ruby are available on [Github.com](https://github.com/optimizely/ruby-sdk/blob/master/lib/optimizely.rb).
