Ruby / Rails将哈希数组推送到数组的方法

时间:2013-01-29 21:02:24

标签: ruby-on-rails ruby gmaps4rails

我正在构建一个数组的哈希,然后将每个哈希推入一个大数组。这很好用(我正在使用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

2 个答案:

答案 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