Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby/Rails将哈希数组推送到数组的方法_Ruby On Rails_Ruby_Gmaps4rails - Fatal编程技术网

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

Ruby on rails Ruby/Rails将哈希数组推送到数组的方法,ruby-on-rails,ruby,gmaps4rails,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 =&g

我将散列构建到一个数组中,然后将每个散列推到一个大数组中。这很好用(我使用的是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索引
@所有点=[]
@links=Link.find([1,2,3])
@links.each do | link|
链接点=[]
link.link_points.each do|pt|
链接点点纬度:lng=>pt.longitude}
结束

@allpoints首先:您不需要创建大量的
@变量
。视图中不使用的(控制器动作的局部变量)应该是经典的局部变量

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

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

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

可以使用
map
下一步进行重构:

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

如果没有别的,考虑使用<代码>收藏夹<代码>。Link kPosits是一个Hastho与链接的关联吗?是的,一个链接有很多链接点,那么也许你想使用快速加载:我正在使用一个解决方案。顺便说一句,你的问题解决起来很有趣:)“我正在研究一个使用它的解决方案”:只需添加
Link.includes(:Link_points)。find([1,2,3])
我喜欢你使用Link.find([1,2,3])的第一种/第二种方法。然后分别映射。你当前编辑的方式创建了一个额外的数组。是的,这个版本可以工作,但我仍然喜欢你的第一个,因为它对我来说更有意义,我会在我的原始帖子中编辑它,但你会得到答案。就个人而言,太多的地图让人困惑。非常有趣-你用另一个答案中的我的代码替换了你的代码,并获得了接受奖..不,我没有@Mik_死。我首先发布了Yeenow123在其答案中发布的版本(使用
all_point=[]
),然后用较短的版本更新了我的答案。很抱歉,如果提问者喜欢我答案的第一个版本。。。
@allpoints = Link.find([1, 2, 3]).map do |link|
  link.link_points.map do |pt|
    { :lat => pt.latitude, :lng => pt.longitude }
  end
end