Ruby on Rails - 如何在 Rails 方法中使用 HTML 坐标?

Posted

技术标签:

【中文标题】Ruby on Rails - 如何在 Rails 方法中使用 HTML 坐标?【英文标题】:Ruby on Rails - How to Use HTML Coordinates in a Rails Method? 【发布时间】:2015-09-08 08:08:14 【问题描述】:

感谢愿意回答我的人。

我有一个方法,目前像 post.distance_to([current_user.latitude, current_user.longitude]) 这样工作。它返回帖子(带有地址)和 current_user 之间的距离。

我在用户模型中创建了属性纬度和经度,因为我不知道如何直接使用通过以下脚本检索到的这些坐标:

<p id="geoloc"></p>
<script>
  var x = document.getElementById("geoloc");

  function getLocation() 
    if (navigator.geolocation) 
      navigator.geolocation.getCurrentPosition(getCoordinates);
     else 
      x.innerhtml = "Geolocation is not supported by this browser.";
    
  

  function getCoordinates(position) 
    var new_latitude = position.coords.latitude;
    var new_longitude = position.coords.longitude;

    $(document).ready(function () 
      $("#latitude_field").val(new_latitude);
      $("#longitude_field").val(new_longitude);
    
  

  getLocation()
</script>

目前我正在通过使用此表单按下按钮来使用新坐标更新用户模型:

<%= form_for(current_user) do |f|  %>
  <%=f.hidden_field :latitude ,:id=> "latitude_field" %>
  <%=f.hidden_field :longitude ,:id=> "longitude_field" %>
  <%=f.submit "I'm here", class: "btn btn-small btn-primary jsbuttons"%>
<%end%>

我想做的是直接调用这个方法post.distance_to(["latitude obtained with the script", "longitude obtained with the script"])。我怎样才能让rails知道这些坐标是什么?我可以使用我在表单中使用的那些 javascript id 来获取值并将它们以某种方式放置在方法中吗? 谢谢!

如果这太复杂了,我可以在每次刷新页面时使用新坐标更新用户模型而无需按下按钮吗? (我尝试为表单创建一个 id 并在 $(document).ready(function) 中为该 id 提交,但没有成功)

【问题讨论】:

【参考方案1】:

为您的表单使用以下代码:

<%= form_tag '/your_url' do |f|  %>
  <%=f.text_field_tag :latitude, params[:latitude], :id=> "latitude_field" %>
  <%=f.text_field :longitude, params[:longitude], :id=> "longitude_field" %>
  <%=f.submit "I'm here", class: "btn btn-small btn-primary jsbuttons"%>
<% end %>

现在在您的控制器操作中,您可以使用以下方式访问 lat/long:

lat = params[:latitude]
lng = params[:longitude]
distance = post.distance_to([lat,lng])

【讨论】:

感谢您的回答,这是我每次刷新页面时更新模型的一种方式吗?使用“/your_url”是指页面的网址,对吗?但是在那个表单标签中,表单如何知道他必须更改 current_user 的纬度和经度属性?另外我想我应该用 submit_tag 更新语法(从 form_form 更改为 form_tag)而不是“f”?谢谢!在第二部分中,您的意思是我必须在用户控制器 @user.latitude= params[:latitude] 的更新操作中设置并且经度相同? @orim 据我了解,您想将坐标与用户分离,对吗?但现在看来你的意思有所不同。请您先简短地定义一下您在做什么。然后我可以更准确地回应。 我有一个页面,用户可以在其中看到地址靠近他的帖子。我有一个如果说'如果 post.distance_to(current.user.latitude, current_user.longitude)' 小于 15 英里,则用户可以看到该帖子。我想要的是从脚本中获取这些纬度和经度(位置.coords.latitude和经度),或者直接在它们上调用方法'post.distance_to(脚本中的纬度,脚本中的经度)'(在在这种情况下,我不需要用户中的 lat 和 long 属性)或使用新坐标以隐藏的方式更新用户模型 *每次刷新页面(邻里主页)时都使用新坐标更新用户模型。我知道它们是解决问题的不同方法,但就我的目的而言,无论哪个更简单都可以 所以你首先显示带有表单的页面,用户点击“我在这里”,然后他被重定向到帖子页面(靠近他)。对吗?

以上是关于Ruby on Rails - 如何在 Rails 方法中使用 HTML 坐标?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ruby​​ on rails 4 中创建高级搜索

Ruby on Rails - 如何在 Rails 方法中使用 HTML 坐标?

如何注销 Facebook - 在 Rails 应用程序中使用代码(Ruby on Rails Omniauth)

如何解决 ruby​​ on rails 版本差异(向后/向前兼容性)

如何在 ruby​​ on rails 中命名外键?

Ruby on Rails 6.0.2.2 版如何使用jQuery hover() 方法