我正在构建一个数组的哈希,然后将每个哈希推入一个大数组。这很好用(我正在使用Gmaps4Rails),但我想知道是否有更多Ruby方法可以解决它?
def index
@allpoints = []
@links = Link.find([1, 2, 3])
@links.each do |link|
linkpoints = []
link.link_points.each do |pt|
linkpoints << { :lat => pt.latitude, :lng => pt.longitude }
end
@allpoints << linkpoints
end
@data = @allpoints.to_json
end
解决方案编辑 :(我选择了下面的一个)比我原来的更短,但在我眼中的可读性非常好:
def index
all_points = []
Link.find([1,2,3]).each do |link|
all_points << link.link_points.map { |pt| { lat: pt.latitude, lng: pt.longitude } }
end
@data = all_points.to_json
end
答案 0 :(得分:2)
首先:您不需要创建大量的@variables
。您未在视图中使用的那些(Controller的操作的局部变量)应该是经典的局部变量。
第二次:你可以像这样重构你的行动:
@data = Link.find([1,2,3]).map do |link|
link.link_points.map{ |pt| {lat: pt.latitude, lng: pt.longitude} }
end.to_json
如果上面的代码没有预期的行为和输出,请告诉我。
答案 1 :(得分:0)
下一步可以用map
重构:
@allpoints = Link.find([1, 2, 3]).map do |link|
link.link_points.map do |pt|
{ :lat => pt.latitude, :lng => pt.longitude }
end
end