Передать больше данных, чем просто объект от преобразователя к типу - PullRequest
0 голосов
/ 12 июня 2019

У меня есть поле бронирований в CustomerType, но для одного поля внутри BookingType мне нужен не только объект AR, но и код предложения. Моя первая идея состояла в том, чтобы просто украсить объект AR, чтобы также знать о коде, но мне интересно, есть ли лучший способ.

Я не хочу снова звонить Заказчику. Может быть, есть что-то похожее на контекст, в который я мог бы добавить данные?

Моя текущая реализация выглядит примерно так:

module Types
  class CustomerType < Types::BaseObject
    alias customer object

    field :bookings, [BookingType]
    def bookings
      offer_code = customer.offers.first&.code

      customer.bookings.map { |booking|
        BookingWithOfferCode.new(booking, offer_code)
      }
    end
  end

  class BookingType < Type::BaseObject
    alias booking object

    field :some_field_requiring_the_offer_code, SomeResultType
    def some_field_requiring_the_offer_code
      offer_code = booking.offer_code
      # doing something with the offer code
    end
  end
end

class BookingWithOfferCode < SimpleDelegator
  attr_reader :offer_code

  def initialize(booking, offer_code)
    super(booking)
    @offer_code = offer_code
  end
end
...