Я просмотрел всю активную модель serializer (v 0.9.0) и вопросы, которые я могу найти, но не могу понять это.Как пропустить объект в массиве Serializer ActiveModel?
У меня есть объекты, которые могут быть помечены как «опубликованные» или «черновики». Когда они не публикуются, только пользователь, создавший объект, должен уметь его видеть. Я могу, очевидно, установить разрешения для «show» в моем контроллере, но я также хочу удалить эти объекты из json, чтобы мои действия «index» вернулись, если это не правильный пользователь. Есть ли способ полностью удалить этот объект из json, возвращаемого сериализатором?
В моем сериализаторе activemodel я могу использовать пользовательский фильтр (ключи) и перегруженные атрибуты для удаления данных, как показано в моем коде ниже, но я не могу просто удалить весь объект (мне осталось return empty {} в моем json, пытаясь вернуть nil, разрывает сериализатор).
Возможно, я пропустил что-то простое. Любая помощь приветствуется!
class CompleteExampleSerializer < ExampleSerializer
attributes :id, :title
has_many :children
def attributes
data = super
(object.published? || object.user == scope || scope.admin?) ? data : {}
end
def filter(keys)
keys = super
(object.published? || object.user == scope || scope.admin?) ? keys : {}
end
end
Вы когда-нибудь это выясняли? У меня точно такая же проблема! Я думаю, что решение может состоять в том, чтобы пропустить его в сериализаторе массива. Еще слишком рано, чтобы мои руки были грязными, хотя я собираюсь дать ему еще час, чтобы набраться мужества. – CleoR
Idt, который будет работать, если эта ассоциация включена в другой сериализованный объект. Вы должны были бы сказать, чтобы использовать ваш специальный сериализатор в каждом другом сериализаторе. Было бы намного проще, если бы вы могли указать сериализатор массива из сериализатора объектов. – CleoR
Я не могу заставить фильтр работать. Я могу просто разделить главы на опубликованные и неопубликованные и создать метод для каждого из модели. Таким образом, я могу использовать все или ничего в сериализаторе. Дайте мне знать, если вы найдете лучший подход. – CleoR