如何将方法传递给 Ruby Map
How to pass methods to Ruby Map
我有以下代码:
wedding = Wedding.where(location_id: user_params[:locationId])
wedding.map(&:guests).each do |member|
user_ids << member.ids
end
在我的例子中 :guests
是一个活动记录 table,但我有一对我想通过 map
生成 user_ids
所以我想传递这样的方法数组:[guests, bride, etc etc]
如果我可以传递整个数组就更好了,否则如果我可以单步执行方法数组那也很棒。
有什么想法吗?
编辑:
我正在尝试这个但没有运气..我得到:NameError (wrong constant name guests):
roles = ["guests"]
wedding = Wedding.where(location_id: user_params[:locationId])
roles.each do |role|
clazz = Kernel.const_get(role)
wedding.map(&:clazz).each do |member|
user_ids << member.ids
end
end
下面,我将一组方法传递给数组 weddings 的成员:
weddings = Wedding.where(location_id: user_params[:locationId])
# array with methods you're interested in
methods=[:guests, :bride]
# looping through the weddings array
weddings.each do |wedding|
# looping through the methods array
methods.each do |method|
# for each wedding, passing every method to the wedding
members=wedding.public_send(method)
members.each do |member|
# storing the values
user_ids << member.ids
end
end
end
我有以下代码:
wedding = Wedding.where(location_id: user_params[:locationId])
wedding.map(&:guests).each do |member|
user_ids << member.ids
end
在我的例子中 :guests
是一个活动记录 table,但我有一对我想通过 map
生成 user_ids
所以我想传递这样的方法数组:[guests, bride, etc etc]
如果我可以传递整个数组就更好了,否则如果我可以单步执行方法数组那也很棒。
有什么想法吗?
编辑:
我正在尝试这个但没有运气..我得到:NameError (wrong constant name guests):
roles = ["guests"]
wedding = Wedding.where(location_id: user_params[:locationId])
roles.each do |role|
clazz = Kernel.const_get(role)
wedding.map(&:clazz).each do |member|
user_ids << member.ids
end
end
下面,我将一组方法传递给数组 weddings 的成员:
weddings = Wedding.where(location_id: user_params[:locationId])
# array with methods you're interested in
methods=[:guests, :bride]
# looping through the weddings array
weddings.each do |wedding|
# looping through the methods array
methods.each do |method|
# for each wedding, passing every method to the wedding
members=wedding.public_send(method)
members.each do |member|
# storing the values
user_ids << member.ids
end
end
end