Я использовал AMS (0.8) с Rails 3.2.19, но одно место, где я действительно борюсь с ними, - это то, как контролировать, включают ли сериализаторы свои ассоциации или нет. Очевидно, я использую AMS для создания JSON API. Иногда сериализатор является конечным или самым дальним элементом, а иногда — верхним уровнем и должен включать ассоциации. Мой вопрос в том, как лучше всего это сделать, или это решение, которое я делаю ниже работы (или это лучшее решение).
Я видел некоторые обсуждения, но я нахожу их очень запутанными (и основанными на версиях). Ясно, что для атрибутов или ассоциаций Serializer есть include_XXX? метод для каждого, и здесь вы можете вернуть либо истинное, либо ложное утверждение.
Вот мой предложенный код - это винодел, у которого много wine_items. Вот как бы вы это сделали?
Классы моделей:
class WineItem < ActiveRecord::Base
attr_accessible :name, :winemaker_id
belongs_to :winemaker
end
class Winemaker < ActiveRecord::Base
attr_accessible :name
has_many :wine_items
attr_accessor :show_items
end
Сериализаторы:
class WinemakerSerializer < ActiveModel::Serializer
attributes :id, :name
has_many :wine_items
def include_wine_items?
object.show_items
end
end
class WineItemSerializer < ActiveModel::Serializer
attributes :id, :name
end
и в моем контроллере:
class ApiWinemakersController < ApplicationController
def index
@winemakers=Winemaker.all
@winemakers.each { |wm| wm.show_items=true }
render json: @winemakers, each_serializer: WinemakerSerializer, root: "data"
end
end
def include_wine_items?
не имеет никакого эффекта - независимо от того, возвращает ли он значение true или false, ассоциация включена. - person prograils   schedule 15.02.2017