从单个对象或集合中获取id的通用方法

时间:2011-07-17 19:42:53

标签: ruby

我想创建一个泛型方法,它将接受单个对象或集合,然后返回一个id的数组,并且从对象/集合中获取的实际id也将作为参数传入。

示例:

a = []
a << get_ids("car_id", some_object)
a << get_ids("user_id", some_collection)


def self.get_ids(id_name, obj)
  # ??
end

这需要我知道的元编程,但我如何判断它是否是一个集合? 发送邮件以检查“id_name”是否为属性?

另外,我目前需要这种类型的功能,所以我想把它变成通用的,所以我可以重复使用它。它是否有任何重大的性能影响?

1 个答案:

答案 0 :(得分:2)

def self.get_ids(id_name, obj)
  if obj.is_a? Enumerable
    obj.collect {|e| e.send(id_name) }
  else
    obj.send(id_name)
  end
end

可替换地,

def self.get_ids(id_name, *objs)
  objs.collect {|e| e.send(id_name) }
end
...
a << get_ids("car_id", some_object)
a << get_ids("user_id", *some_collection)