Sha256: 46661cec70a95bd8b1f72a3b8d2d017623b0e64e73457effecbf366234e10b6d

Contents?: true

Size: 1.99 KB

Versions: 5

Compression:

Stored size: 1.99 KB

Contents

[Back to Guides](../README.md)

## Using ActiveModelSerializers Outside Of A Controller

### Serializing a resource

In ActiveModelSerializers versions 0.10 or later, serializing resources outside of the controller context is fairly simple:

```ruby
# Create our resource
post = Post.create(title: "Sample post", body: "I love Active Model Serializers!")

# Optional options parameters
options = {}

# Create a serializable resource instance
serializable_resource = ActiveModelSerializers::SerializableResource.new(post, options)

# Convert your resource into json
model_json = serializable_resource.as_json
```
The object that is passed to `ActiveModelSerializers::SerializableResource.new` can be a single resource or a collection.

### Looking up the Serializer for a Resource

If you want to retrieve the serializer class for a specific resource, you can do the following:

```ruby
# Create our resource
post = Post.create(title: "Another Example", body: "So much fun.")

# Optional options parameters
options = {}

# Retrieve the default serializer for posts
serializer = ActiveModel::Serializer.serializer_for(post, options)
```

You could also retrieve the serializer via:

```ruby
ActiveModelSerializers::SerializableResource.new(post, options).serializer
```

Both approaches will return the serializer class that will be used for the resource.

Additionally, you could retrieve the serializer instance for the resource via:

```ruby
ActiveModelSerializers::SerializableResource.new(post, options).serializer_instance
```

## Serializing before controller render

At times, you might want to use a serializer without rendering it to the view. For those cases, you can create an instance of `ActiveModelSerializers::SerializableResource` with
the resource you want to be serialized and call `.as_json`.

```ruby
def create
  message = current_user.messages.create!(message_params)
  message_json = ActiveModelSerializers::SerializableResource.new(message).as_json
  MessageCreationWorker.perform(message_json)
  head 204
end
```

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
active_model_serializers-0.10.4 docs/howto/outside_controller_use.md
agi_active_model_serializers-0.10.9 docs/howto/outside_controller_use.md
agi_active_model_serializers-0.10.8 docs/howto/outside_controller_use.md
agi_active_model_serializers-0.10.7 docs/howto/outside_controller_use.md
active_model_serializers-0.10.3 docs/howto/outside_controller_use.md