Module: Jbuilder

Defined in:
lib/jbuilder/serializer.rb,
lib/jbuilder/serializer/version.rb

Overview

Wraps jbuilder into a serializer class, so it can be used outside of a controller action.

Usage

Create a serializer and define the `template_path` and `locals` for jbuilder view.

# app/serializers/order_create_serializer.rb
class OrderCreateSerializer < Jbuilder::Serializer
  set_template_path File.expand_path('views', __dir__)

  locals do |attrs|
    @order = attrs[:order]
    @author = attrs[:user]
    @items = @order.items.select &:active?
  end
end

Create your jbuilder view file and place it on the folder specified through `template_path`.

# app/serializers/views/order_create.json.jbuilder
json.order do
  json.created_by @author.username
  json.id @order.id
  json.items @items do |item|
    json.id item.id
    json.quantity item.quantity
  end
end

Then instantiate the serializer, providing its args for `locals` assignment.

serializer = OrderCreateSerializer.new(order: @order, user: current_user)
serializer.to_json
=> "{\"order\": {\"created_by\": \"donald-duck\", \"id\":34, \"items\": [{\"id\": 78, \"quantity\": 1},{\"id\": 94, \"quantity\": 3}]}}"

Defined Under Namespace

Classes: Serializer