У меня возникает проблема, когда я работаю с методом as_json и как эффективно возвращать объект в JSON. И он принадлежит объекту как JSON, а объект принадлежит этому объекту принадлежит свой object_to. Код, вероятно, объяснит это лучше.
Нерабочий путь
Класс предупреждения
class Alert < ActiveRecord::Base
    belongs_to :message
    # for json rendering
    def as_json(options={})
        super(:include => :message)
    end
end
Класс сообщений
 def as_json(options={})
    super( methods: [:timestamp, :num_photos, :first_photo_url, :tag_names],
           include: { camera: { only: [:id, :name] },
                      position: { only: [:id, :name, :address, :default_threat_level ]},
                      images: { only: [:id, :photo_url, :is_hidden]} })
  end
Проблема с этой первой настройкой заключается в том, что когда у меня есть объект Alert и вызывается
alert.as_json()
Я получаю все атрибуты из Alert и всех атрибутов из Message, но ни один из других атрибутов из сообщения, которое я хочу, например Camera, Position и т.д.
Здесь "Это работает, но, вероятно, не правильный путь дизайна"
Класс предупреждения
class Alert < ActiveRecord::Base
    belongs_to :message
    # for json rendering
    def as_json(options={})
        super().merge(:message => message.as_json)
    end
end
Класс сообщений
  # for json rendering
  def as_json(options={})
    super( methods: [:timestamp, :num_photos, :first_photo_url, :tag_names])
          .merge(:camera => camera.as_json)
          .merge(:position => position.as_json)
          .merge(:images => images.as_json)
  end
В этой 2-й настройке я получаю все вложенные атрибуты сообщений, как я хочу.
Мой вопрос: я пропустил какую-то Rails-конвенцию, чтобы сделать это правильно? Похоже, что было бы/должно быть проще.