ruby-on-rails - 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
,我找不到正确的语法来实现这一点。
解决方案
假设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。
推荐阅读
- python - PDF python图模糊 - 图像插值?
- python - Frame中的tkinter背景图像
- angular - 在 Cloudfront 上几天后刷新 Angular index.html,S3 是最新的
- sass - SASS 无法观看 scss,使用 [--watch]
- python - numpy 的负数 where 的预期效果是什么?
- python - 屏幕管理器中的屏幕更新
- algorithm - 如何计算机器学习训练计算时间,参考值是多少?
- vim - 如何防止在vim中保存文件
- excel - 在下拉按钮中从列表或表格中添加数据
- javascript - 输出空数组 - (异步)