ruby-on-rails - Ruby映射未知的父子关系(组合而不是继承)&获取父/子名称或给定一个已知对象的对象?
问题描述
假设我想映射一个未知的父子关系,我知道@object_instance
它本身可能是父母或孩子。然后我想看看这@object_instance
是否有父母或孩子,然后适当地列出 ID。例如,在伪代码中:
def map_relationships
if self.has_children
puts "This object has children named #{self.child.class_name} with ID(s) #{self.children.map(&:id)}"
end
if self.has_parent
puts "This object has a parent named #{self.parent.class_name} with ID(s) #{self.parent.id}"
end
end
假设Company has_many Sites
and a Site has many Offices
, and@object_instance
是一个站点,那么上述方法的结果将是:
@object_instance.map_relationships
> "This object has children named Desks with ID(s) [5,6,7]"
> "This object has a parent named Company with ID(s) 4"
像这样的事情可能吗?我浏览public_methods
了 Class 和它的实例,但看不到明显的东西。
谢谢!
解决方案
我找到了一种方法,基本上你可以使用 构造上述方法reflect_on_all_associations
,它的工作原理如下:
# get parent
@object_instance.class.reflect_on_all_associations(:belongs_to)
# returns an array, like below
# [:company]
# get children
@object_instance.class.reflect_on_all_associations(:has_many)
# returns an array, like below
# [:desks]
如果有其他漂亮的方法可以做到这一点,欢迎其他答案
推荐阅读
- angularjs - 如何在 Azure DevOps 中执行“ng build”命令?
- javascript - 强制在所有屏幕上仅显示桌面版本
- reactjs - 当您来自网站中的标签时,如何获取以前的网站网址?
- python - 在多应用网站上使用 Ploty Dash-Extensions 库
- hadoop - NoSuchMethod HiveDecimalWritable
(J)V - reactjs - 超过firebase中的限制时onSnapshot不起作用
- python - 在 Google Colab 上的会话中断后从最后一步恢复训练 faster-rccn 模型
- python - Python panda根据长度修改特定列值
- uwp - 如何将 DPI 感知添加到我的 Visual Studio 项目?
- php - 如何在 PHP + slim 3 API 中保存 ngx-dropzone 以角度上传的文件?