Нет, по умолчанию при сериализации экземпляра модели выдаются только его собственные атрибуты, а не атрибуты его ассоциаций. Но вы можете настроить это поведение, включив в модель метод as_json
:
class MyModel < ActiveRecord::Base
has_many :widgets
def as_json(options={})
{
:name => name,
:widgets => widgets.to_json
}
end
end
Возможно, вы захотите определить as_json
и в связанной модели, иначе вы получите стандартный хэш атрибутов.
EDIT
Оказывается, что приведенный выше пример работает только для верхнего уровня, а не для ассоциаций, которые в конечном итоге избежали. Чтобы пример работал, определите as_json
с необходимыми атрибутами в Widget
, затем в MyModel
вызовите as_json
для каждого элемента коллекции:
def as_json(options={})
{
:name => name,
:widgets => widgets.map(&:as_json)
}
end
Полагаю, вместо этого вы можете установить Arkey # as_json, но я предпочитаю использовать map
.
EDIT
Если вы думаете о том, чтобы проголосовать против этого ответа, сначала прочитайте этот . Использование :include
является предпочтительным подходом.