首页 > 解决方案 > 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 Sitesand 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 和它的实例,但看不到明显的东西。

谢谢!

标签: ruby-on-railsrubyparent-child

解决方案


我找到了一种方法,基本上你可以使用 构造上述方法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]

如果有其他漂亮的方法可以做到这一点,欢迎其他答案


推荐阅读