Активная модель сериализатор и скрепки разных размеров
У меня есть класс модели активов, и он имеет разные размеры, используя скрепку 3.5.2:
class AssetSerializer < ActiveModel::Serializer
attributes :id, :asset # works fine
# would like to output small but don't seem to be able to
#attributes :id, :asset, :asset(:small)
end
Это немного сбивает с толку, потому что скрепка использует имя class, а модель называется class (ОК действительно сбивает с толку). Я получаю следующую ошибку:
/Users/jt/repos/rails/app/serializers/asset_serializer.rb:2: syntax error, unexpected '(', expecting keyword_end
attributes :id, :asset, :asset(:small)
Ему явно не нравится аргумент, переданный активу
3 ответа:
Вы можете просто добавить пользовательский атрибут внутри сериализатора
У них есть пример в документах https://github.com/rails-api/active_model_serializers#attributes
Вот что бы вы использовали в своем примере.
class AssetSerializer < ActiveModel::Serializer attributes :id, :asset, :asset_small def asset_small object.asset.url(:small) end end
Я не уверен, что это работает, но попробуйте это: Или, возможно, поиграйте вокруг define_method, чтобы переопределить: asset.
class AssetSerializer < ActiveModel::Serializer attributes :id, :asset self._attributes.each do |attribute, value| define_method(attribute) do object.read_attribute(attribute) end end end