:ruby
  version_item = current_or_last_object_state(version.item_type, version.item_id)
  previous_version = version.event == 'create' ? version : (version.reify || version.previous_version)
  version_previous_item = current_or_last_object_state(previous_version.try(:item_type), previous_version.try(:item_id))

.col-md-10.col-md-offset-1.changeset{ id: "changeset-#{version.id}" }
  %br
  %br
  %table.table.table-bordered.table-hover
    %thead
      %tr
        %th Updated Attribute

        %th{ class: "#{'hidden' if version.event == 'create'}" }
          Prevous Value

        %th{ class: "#{'hidden' if version.event == 'destroy'}" }
          New Value

        - if can? :revert_attribute, version
          %th Action
    %tbody
      - if version.event != 'destroy'
        - version.changeset.reject{ |_, values| values[0].blank? && values[1].blank? }.each do |attribute, values|
          %tr
            %td= attribute
            - if version.event != 'create'
              %td
                / If the attribute is an associated model, show the value of the record it corresponds to, not just the ID.
                / Eg. when the version is of an Event, if the attribute is event_type_id it shows
                / Workshop (ID: 116) instead of just 116
                - if attribute.include?('_id')
                  - model_name = attribute.chomp('_id').camelize
                  - associated_object = current_or_last_object_state(model_name, values[0])

                  = associated_object.try(:title) || associated_object.try(:name)
                  = values[0].blank? ? '-' : "(ID: #{values[0]})"
                - else
                  = values[0].blank? ?  '-' : values[0]

                  - if attribute == 'price_cents'
                    = "(#{humanized_money_with_symbol previous_version.try(:price)})"
            %td
              - if attribute.include?('_id')
                - model_name = attribute.chomp('_id').camelize
                - associated_object = current_or_last_object_state(model_name, values[1])

                = associated_object.try(:title) || associated_object.try(:name)
                = (values[1].blank? ? '-' : "(ID: #{values[1]})")

              - else
                = values[1].blank? ?  '-' : values[1]

                - if attribute == 'price_cents'
                  = "(#{humanized_money_with_symbol version_item.try(:price)})"

            - if can? :revert_attribute, version
              %td= link_to 'Revert', admin_revision_history_revert_attribute_path(id: version.id, attribute: attribute), class: 'btn btn-sm btn-primary', data: { confirm: "Are you sure you want to revert #{attribute}?" }
      - else
        - version.reify.attributes.each do |attribute, value|
          %tr
            %td= attribute

            %td
              - if attribute.include?('_id')
                - model_name = attribute.chomp('_id').camelize
                - associated_object = current_or_last_object_state(model_name, value)
                = associated_object.try(:title) || associated_object.try(:name)
                = value.blank? ? '-' : "(ID: #{value})"
              - else
                = value.blank? ?  '-' : value

                - if attribute == 'price_cents'
                  = "(#{humanized_money_with_symbol version_item.try(:price)})"
