【问题标题】:HTML5 Geolocation In RailsRails 中的 HTML5 地理定位
【发布时间】:2015-03-27 22:39:50
【问题描述】:

我正在尝试通过 HTML5 获取用户位置并将其传递给我的 rails 控制器。

我有下面的 JavaScript 调用元素上的 .value 并将其设置为等于相应的位置。然后,我想通过隐藏的表单字段提交这些值并将其传递给我的位置控制器,以便我可以根据用户位置填充位置。我知道这已经完成了,我也看到了一些关于它的帖子,但我没有成功。

navigator.geolocation.getCurrentPosition(GeoL);
function GeoL(position) {
  document.getElementById('lat').value = position.coords.latitude;
  document.getElementById('lon').value = position.coords.longitude;
}

<%= form_tag locations_path, :method=>'post' do %>
  <%= hidden_field_tag 'lat', value = ''%>
  <%= hidden_field_tag 'lon', value = ''%>
  <%= image_submit_tag 'loc.png'  %>
<% end %>

def create
 "What goes here? Grab params? Is this the right action to send it to?"
end

我目前收到您在下面的屏幕截图中看到的错误。我认为我的表单可能需要一些工作,另外我需要在控制器中添加代码来获取值。正如你所看到的有点失落,任何建议都会很棒。

【问题讨论】:

  • 看来您的参数(纬度和经度)已正确发送,您接下来要做什么,您没有准确发布错误消息。
  • 对,对不起。 “参数丢失或值为空:位置”是错误消息。理想情况下,我想将它们传递给我的控制器,这样我就可以在我的视图中渲染它们,让控制器根据它们的位置过滤结果。我现在可以使用地理编码器 gem,但使用 ip 地址并不准确。
  • 所以位置是您系统中的模型?你用的是什么宝石?
  • 是的,我目前只有一个模型位置。我首先使用了 ruby​​ geocoder gem,我用它来定位位置,但是为了让用户接近它并不是很准确。所以我正在尝试使用 HTML5 并将其传递给控制器​​。我希望能够显示“您距此位置 2.2 英里”或类似的内容。但是现在有了地理编码器,它已经关闭了很多。
  • 我推荐geokit-rails,它更容易,如果你愿意,我可以提供一个例子,无论如何,位置的准确性取决于设备,它是否可以访问蜂窝网络/wifi或gps

标签: javascript ruby-on-rails html geolocation


【解决方案1】:

据我了解,您希望根据用户的位置显示位置。这意味着您可以像以前那样定位用户,将 lat 和 lon 写入 hidden_form_fields 并通过 ajax 将此表单发送到您的 locations_controllerindex (!) 操作(不是创建操作)。

使用地理编码器,控制器看起来像这样:

@locations = Location.near([params[:lat], params[:lon]])
.
.
.
respond_to do |format|
 format.html {}
 format.js {}
end

然后您只需将新的@locations 插入到您的索引视图中

【讨论】:

  • 谢谢@Tom。我不需要使用 ajax,只需要设置一个路由,以便表单向 index 操作提交发布请求,而不是 create 操作。从那里我使用了您在索引操作中建议的参数,它运行良好。 match "locations" =&gt; "locations#index", :via =&gt; [:post] 是我们所需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2011-03-24
  • 2011-12-11
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 2013-04-18
相关资源
最近更新 更多