Ruby on Rails - имеет ли значение порядок атрибутов в ActiveModel: Serializer? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть простой Serializer, где обработка атрибута зависит от обработки другого атрибута.

Так что мой код выглядит примерно так:

class CounterSerializer < ActiveModel::Serializer

  attribute :CounterId do
    object.id
  end

  attribute :CounterValue do
    @value = SomeClass.get_counter_value(object.id)
  end

  attribute :NextCounterValue do
    @value + 1
  end
end 

Итак, учитывая, что я использую @value в двух атрибутах, а значение второго зависит от вывода первого, могу ли я предположить, что CounterValue будет вычислено до NextCounterValue ? (т.е. нет проблем с асинхронными вычислениями)

Также имейте в виду, что NextCounterValue не должен делать очередной вызов SomeClass.get_counter_value (проблемы с производительностью)

1 Ответ

1 голос
/ 12 апреля 2019

Я полагаю, что ваш код должен работать, но если вы хотите быть уверены, что ваш код будет работать, я советую вам использовать памятка .

class CounterSerializer < ActiveModel::Serializer

  attributes :counterId, :counterValue, :nextCounterValue

  def counterId
    object.id
  end

  def counterValue
    @value ||= SomeClass.get_counter_value(object.id)
  end

  def nextCounterValue
    counterValue + 1
  end
end

Благодаря напоминанию, этот код больше не будет вызывать SomeClass.get_counter_value, и вы будете уверены, что ваш код ведет себя так, как вы хотите.

...