假设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
似乎是 belongs_to User
(当你直接引用它时)但你想将它嵌套在 内Setting
,这意味着它是一个“belongs_to :through”关系,此时我认为你应该Setting
对嵌套负责。
最后,如果你想开发复杂的 JSON 输出,而不是覆盖 as_json,你应该考虑使用jbuilder(通常与 rails 捆绑在一起),因为它将你的 JSON 逻辑从模型中移到视图中,这可以说是更合适的构建您如何查看数据的地方。JBuilder 更擅长设计复杂的 JSON。