1

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

2 回答 2

2

第一:您不需要创建大量@variables. 您未在视图中使用的那些(控制器操作的局部变量)应该是经典的局部变量。

第二:您可以像这样重构您的操作:

@data = Link.find([1,2,3]).map do |link|
  link.link_points.map{ |pt| {lat: pt.latitude, lng: pt.longitude} }
end.to_json

如果上面的代码没有预期的行为和输出,请告诉我。

于 2013-01-29T21:08:33.013 回答
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
于 2013-01-29T21:11:26.060 回答