Варианты виноградного представителя

Я работаю над API рельсов с представителями, используя следующие драгоценные камни: Grape, Рев и Виноград- Рев

Теперь я пытаюсь добавить условия для включения (или не включения) определенных свойств в мой представитель на основе условия, которое я передаю из конечной точки API, как описано здесь (обратите внимание, что представляемый камень используется камнем Roar)

Я, вероятно, что-то упускаю из виду, но я не могу понять, как передать параметры моему представителю, поэтому я могу представлять свойства на основе условия.

Например, в одной из моих конечных точек винограда я вызываю:

present payment_object, with: PaymentRepresenter, include_orders: true

для представления объекта платежа с помощью PaymentRepresenter. Как вы можете видеть, я также хочу включить соответствующий заказ для платежа, поэтому в своем представителе платежей я попытался сделать:

property :order, extend: OrderRepresenter, if: lambda { 
    |args| puts args[:include_orders] #just puts for testing
}

однако args[:include_orders] просто равен нулю

Кто-нибудь знает, что я делаю неправильно здесь?

Заранее спасибо!


person PSR    schedule 11.05.2015    source источник


Ответы (1)


У меня самого была эта проблема, и единственное решение, которое я придумал, состояло в том, чтобы отказаться от красивой идиоматической present..., with:... и вручную extend моей коллекции/записи с представителем, например (относительно вашего примера):

payment_object.extend(PaymentRepresenter).to_hash(include_orders: true)
person Yaro Holodiuk    schedule 11.05.2015
comment
спасибо @yaro, это полностью работает! Для других: обязательно включите , env: request.env в to_hash(), если вам требуются переменные среды в вашем представителе, как это сделал я, например. для PATH_INFO - person PSR; 12.05.2015