Вложенные атрибуты Rails JSON Форматирование
Я пытаюсь переопределить метод 'as_json', чтобы включить вложенные атрибуты для объекта, но у меня возникают проблемы с правильным вложением JSON.
В настоящее время у меня есть это в Rails для моего метода as_json.
// User.rb
def as_json(options = {})
json = {:id => id, :name => name,
:settings_attributes => settings.select(:id,:name),
:setting_options_attributes => setting_options.select(:id, :amount)}
json
end
Тем не мение, setting_options_attributes
должны быть вложены в settings_attributes
и я не могу найти правильный синтаксис для достижения этой цели.
1 ответ
Если предположить, settings
а также settings_options
уже хэши, вы должны быть в состоянии сделать это:
// User.rb
def as_json(options = {})
{
id: id,
name: name,
settings_attributes: settings.select(:id,:name).merge({
setting_options_attributes: setting_options.select(:id, :amount)
},
}
end
Если settings
а также settings_options
Модели, то вам, вероятно, нужно сделать что-то вроде этого:
// User.rb
def as_json(options = {})
{
id: id,
name: name,
settings_attributes: settings.select(:id,:name).map(&:attributes),
}
end
// Setting.rb
def attributes
{
id: id,
name: name,
setting_options_attributes: setting_options.select(:id,:amount).map(&:attributes),
}
end
Это немного сбивает с толку в этом SettingOption
кажется, принадлежит User
(как вы ссылаетесь на это непосредственно), но вы хотите вложить его в Setting
, что подразумевает, что это отношение "own_to:through", и в этот момент я думаю, что вы должны сделать Setting
ответственность за вложенность.
Наконец, если вы хотите разработать сложный вывод JSON, а не переопределять as_json, вам следует рассмотреть возможность использования jbuilder (который обычно связан с rails), поскольку он перемещает вашу логику JSON из вашей модели в представление, что, возможно, является более подходящим место для построения того, как вы просматриваете ваши данные. JBuilder намного лучше проектирует сложный JSON.