Мне любопытно, что люди используют AR to_xml () для создания полей, не являющихся объектами (например, не атрибута модели, которую вы сериализуете, а, возможно, использование атрибутов в процессе) из контроллера.
to_xml предлагает несколько вариантов для этого.
Одним из них является передача ссылок на методы объекта, на который воздействуют: в процессе сериализации эти методы вызываются и их результаты добавляются в сгенерированный документ. Я бы хотел избежать этого пути, потому что некоторые из сгенерированных данных, в зависимости от атрибутов объекта, могут выходить за рамки самой модели - например, создание URL-адреса для определенного элемента «show» action. Плюс, это требует слишком много продуманного. Я хотел бы просто иметь возможность изменить результирующий документ путем настройки кода to_xml из контроллера. Я не хочу хлопот необходимости объявлять метод в объекте также.
То же самое касается переопределения to_xml в каждом объекте.
Другие два варианта, похоже, лучше соответствуют требованиям: один из них заключается в передаче процедур в параметрах сериализации, которые генерируют эти поля, а другой - в передаче блока, который будет уступать после сериализации атрибутов объектов. Они предоставляют тот вид настройки в момент вызова, который я ищу, и, кроме того, их объявления связывают область действия с контроллером, так что они имеют доступ к тому же материалу, что и контроллер, но они методы кажутся критически ограниченными: AFAICT они не содержат ссылки на сериализуемый объект. Они содержат ссылки на объект компоновщика, который, я думаю, вы могли бы проанализировать в блоке / proc и найти атрибуты, которые уже были сериализованы, и использовать их, но это харанг, или, по крайней мере, нелегкий и неоптимальный.
Поправьте меня, если я ошибаюсь, но какой смысл иметь доступ к прокам / блокам при сериализации одного или нескольких объектов, если вам нужен доступ к самому объекту.
В любом случае, пожалуйста, скажите мне, как я ошибаюсь, потому что, похоже, я здесь что-то упускаю.
Да, да, я знаю, что могу написать свою собственную точку зрения. Я пытаюсь использовать response_to и to_xml для достижения минимального количества дополнительных файлов / строк. (Впрочем, именно к этому я и прибегал, когда не мог понять, как это сделать с помощью сериализации AR.)
** РЕДАКТИРОВАТЬ 3.29.09 - Я только что отправил патч для этого в Rails. Если вам интересно, покажите поддержку :) https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/2373-record-sensitive-procs-for-to_xml