将ruby变量传递给js代码

时间:2011-05-13 09:22:58

标签: javascript ruby-on-rails google-maps

我很好奇将rails变量传递给javascript代码的最佳方法是什么。例如,我在我的控制器中有这一行:

@address = get_user_address
@farms = Farm.all

现在我需要用它来初始化我的谷歌地图,现在我用普通的javascript和我更确定这是丑陋的解决方案。在视图中我有类似的东西

%script
  distance = []
  - @farms.each do |f|
    distance.push(['#{f.latitude}' + ',' + '#{f.longitude}' + ',' + '#{f.name}', #{f.distance_from(@address)}])
  distance.sort(sortMultiDimensional)
  user_coords = #{Geocoder.coordinates(@address)}

谷歌地图正在进行中。如何避免这个丑陋的ruby-in-javascript代码?谢谢!

2 个答案:

答案 0 :(得分:4)

将变量放入呈现页面的HTML中,然后使用javascript在执行时从DOM中读取它们。这允许您在单独的文件中编写JS,而不会使用随机脚本变量使文件混乱。

确保清理用户提供的变量。

答案 1 :(得分:0)

%script
  distance = #{@farms.collect{|f| [f.latitude, f.longitude, f.name] }.inspect}
  distance.sort(sortMultiDimensional)
  user_coords = #{Geocoder.coordinates(@address)}