Как определить метод сериализатора в Rails netflix fast_jsonapi в Rails? - PullRequest
1 голос
/ 11 марта 2019

Как определить функцию в Serializer, используя Rails Netflix fast_jsonapi в Rails, как сериализатор активной модели?

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Из файла fast_jsonapi

class MovieSerializer
  include FastJsonapi::ObjectSerializer

  attributes :name, :year

  attribute :name_with_year do |object|
    "#{object.name} (#{object.year})"
  end
end

Продолжая, вы можете сделать что-то вроде

class MovieSerializer
  include FastJsonapi::ObjectSerializer

  attributes :name, :year

  attribute :name_with_year do |object|
    foo(object)
  end

  def foo(object)
    # do something with object
  end
end
0 голосов
/ 04 апреля 2019

Это ... сложно. Это было поднято как проблема некоторое время назад, но ничего еще не вышло.

Что происходит, так это то, что сериализаторы действуют как синглтоны, так что вы в основном вынуждены использовать методы класса, например

class MovieSerializer
  include FastJsonapi::ObjectSerializer

  attributes :name, :year

  attribute :name_with_year do |object|
    foo(object)
  end

  def self.foo(object) # will be called
    # do something with object
  end

  def foo(object) # will never be called
    # do something with object
  end
end

В этом драгоценном камне есть странные вещи, которые делают это необходимым.

...