Ruby每个循环都是纤细的

tri*_*0x2 7 ruby ruby-on-rails slim-lang

我希望能够通过javascript循环实例var但我不太确定如何使它工作.

javascript:
  -@spots.each do |spot|
      map.addMarker({
        lat: "#{spot.latitude}",
        lng: "#{spot.longitude}",
        title: "spot",
      });
  });
Run Code Online (Sandbox Code Playgroud)

我尝试了什么:使用<%@ spots.each do | spot | %>且没有#{}的引号

mr *_*ers 8

看来,一旦你处于javascript:苗条状态,你就不能再进行红宝石循环了.

我能够得到这个主要是工作

- @spots.each do |spot|
  javascript:
    map.addMarker({
      lat: #{spot.latitude},
      lng: #{spot.longitude},
      title: "spot"
    });
Run Code Online (Sandbox Code Playgroud)

但这会为每个addMarker调用创建单独的脚本标记,这看起来很愚蠢.

您还可以尝试将数据作为JSON放在页面上,然后在Javascript中执行循环.像这样的东西:

javascript:
  var spots = #{raw @spots.to_json};
  var ii = 0;
  var nspots = spots.length;
  for(;ii<nspots;++ii) {
    theMap.addMarker(spots[ii]);
  }
Run Code Online (Sandbox Code Playgroud)

你想确保theMap在这个东西运行的时候可用,但我认为这可能会有所帮助.您还应该检查每个@spot的JSON格式.根据您如何设置JSON,每个点可能看起来像

{'spot': { 'latitude': ###, 'longitude': ### } } 
Run Code Online (Sandbox Code Playgroud)

这意味着你必须取消引用循环中的对象.