ruby-on-rails - 返回关联的计数而不是所有关联本身
问题描述
所以,一个Object
有很多properties
,一个property
属于一个Object
。这就是目前的协会。现在,当我使用 Object.all 渲染所有对象并包含关联时,我会在渲染的 JSON:properties
中获得模型的所有属性。property
但我真的不需要那个。我需要的只是关联的数量。即,只是与任何一个对象相关联的属性的数量。这是我的代码:
@objects = Object.all
respond_to do |format|
format.json {
render json: @objects.to_json(:include => [:properties])
}
end
这会产生类似的东西。目前只有 1property
与1 相关联object
,并且正如您在 JSON 中看到的那样,我得到了很多关于properties
我不需要也不想要的相关的(或者更确切地说,属性)的信息。
"id": 2,
"attrs_go_here": "asdfsdaf"
"created_at": "2018-07-14T23:51:55.161Z",
"updated_at": "2018-07-14T23:51:55.161Z",
"properties": [
{
"id": 5,
"more_attributes": "asdfasdfasdf"
"created_at": "2018-07-14T23:53:14.917Z",
"updated_at": "2018-07-14T23:53:14.917Z"
}
]
但相反,我想要这样的东西,我得到关联的数量:
"id": 2,
"attrs_go_here": "asdfsdaf"
"created_at": "2018-07-14T23:51:55.161Z",
"updated_at": "2018-07-14T23:51:55.161Z",
"properties": 1
我只想要这个数字的原因是因为可能有数十万个属性与任何一个对象相关联。而且我觉得渲染与对象关联的所有属性的所有属性真的很慢,而我首先需要的是对象与其属性之间存在的关联数量。
解决方案
为您的模型添加方法Object
def properties_count
self.properties.count
end
在你的控制器上做
render json: @objects.to_json(methods: [:properties_count])
虽然我不确定可能的 n+1。在这种情况下,您应该使用
@objects = Object.includes(:properties).all
编辑从技术上讲,它不打算给出论据to_json
只需要吸气剂。但是你可以按照这些思路做一些事情:
class Object
attr_accessor :attribute
def method_with_params(attribute = nil)
attribute ||= attribute
# rest of your code
end
end
@object.attribute = 'foodbar'
render json: @object.to_json(methods: [:method_with_params]
)
推荐阅读
- c - 在 c 中定义函数和打印
- java - 多线程中的休眠异常 - 事务未成功启动
- c++ - 有效地从 32 位数据类型中删除 2 位
- c# - 将列表对象序列化为 XML 值异常:反映类型“..Otrx”时出现错误
- android - 将图像而不是字符串标题添加到 react-native-segmented-control-tab
- java - 如何从数据类调用 Kotlin copy() 到 java 类?
- php - 遍历 foreach 循环中的单个项目的问题
- python - 如何使用嵌套的 for 循环进行暴力破解组合 - Python
- c++ - 如何确定使用空大括号初始化程序调用的构造函数?
- java - 在运行 jar 时访问 jar 之外的 prop 文件