我正在尝试使用我新获得但不完整的ruby知识来构造一些JSON数据。它基本上是rails应用程序的一部分,其中数据库是1个用户到多个关系(字段follower_id和followed_id)。 JSON的格式应为:
{"nodes":["1","102","10","61","6","54","29","84","82"],"edges":[["1","54"],["10","29"],["61","84"],["1","61"],["10","82"]]}
我想删除任何边数组,其中两个或其中一个数字不存在于nodes数组中。真实文件可能比这大得多,所以最有效的方法可能会很棒。
我的代码如下:
def self.joinup(id)
c = Challenge.find(1)
result={}
user_ids = c.users.pluck(:id)
result["nodes"] = user_ids.collect(&:to_s).flatten.uniq
result["edges"] = Relationship.where(follower_id: user_ids).map{|h| [h.follower_id.to_s, h.followed_id.to_s]}
#if elements of edges are not present in nodes then remove doublet
result["nodes"] = result["nodes"]|result["edges"].flatten
result
end
end
答案 0 :(得分:1)
我的理解是你要删除其中两个或其中一个不再位于users表(节点数组)中的悬空关系(边缘)。
然后这应该这样做:
result["edges"].select! {|edge| result["nodes"].include?(edge[0]) && result["nodes"].include?(edge[1]) }