如何将谷歌地图添加到活动管理员?

时间:2016-11-09 14:51:32

标签: ruby-on-rails google-maps ruby-on-rails-4 activeadmin

我在我的rails应用程序中使用active-admin并想在google地图上绘制(lat,lot)。有人可以指导我如何去做。

这是我的booking_geo_locations.rb文件

ActiveAdmin.register BookingGeoLocation do
    show do
        attributes_table do
          row :id
          row :user_id
          row :date_pickup      
          row :location_pickup
          row :date_dropoff
          row :location_dropoff
          row :location_pickup_latitude
          row :location_dropoff_latitude 
          row :driver_price

          end
      end

1 个答案:

答案 0 :(得分:1)

为简单起见,我的示例基于rails g scaffold Post location:string latitude:float longitude:float迁移。

将此添加到 config / initializers / active_admin.rb 的末尾(在最后一个end之后):

Rails.application.config.after_initialize do
  javascripts = Array.wrap("//maps.googleapis.com/maps/api/js?key=#{ENV['GOOGLE_MAPS_API_KEY']}&libraries=places")
  javascripts += ActiveAdmin.application.javascripts.to_a
  ActiveAdmin.application.javascripts.replace javascripts
end

您必须重新启动服务器才能生效。请注意,这利用了一个环境变量,您也必须对其进行设置。

接下来,您要在 app / assets / javascripts / active_admin.js.coffee 中执行以下操作:

jQuery ->
  input = document.getElementById("post_location");
  if input
    autocomplete = new google.maps.places.Autocomplete(input);
    autocomplete.addListener "place_changed", ->
      $("#post_latitude").val(autocomplete.getPlace().geometry.location.lat());
      $("#post_longitude").val(autocomplete.getPlace().geometry.location.lng());

当您添加新帖子时,键入Google Maps提供的下拉菜单时,您会得到一个提示。从那里选择一个选项将填充您的纬度和经度字段-最好将它们设置为只读,以便您的用户可以直观地确认所选择的坐标,但不能更改数据。

注意:要在您的BookingGeoLocation模型上实现此功能,您的表中还需要另外两列location_pickup_longitudelocation_dropoff_longitude。确保它们的类型为Float