0

我在 3 周前开始使用 Ruby on Rails,到目前为止我很喜欢它,但我需要一些帮助。

我正在开发一个网络应用程序,其中包括跟踪用户的位置并将其定期存储在数据库中。每分钟获取位置的 javascript 正在工作,但我不知道如何将此位置存储在数据库中。该脚本在应用程序视图中定义。我设法使用 ajax 和 POST 调用在 UsersController 中定义的 update_location 操作。lat long 列会正确更新,但会发生页面重定向。我希望更新过程是异步的并且对用户隐藏。

当我尝试使用 PUT ajax 请求(使用 _method=PUT 进行 POST)时,我得到一个未找到 user/:id/location_update 的 URL。

我是 RoR 甚至是 Web Dev 的完整初学者。PS我正在使用Rails 4。

编辑:将 $.ajax 或 $.post 与 _method 一起使用:“PUT”和 URL /update_location 会触发以下 500 错误

ActionView::MissingTemplate (Missing template users/update_location, application/update_location with {:locale=>[:en], :formats=>[...]}. Searched in:
  * "/home/.../app/views"
):

我的 update_location 操作看起来像这样

  def update_location
    @car = Car.find(3)
      if @car.update_attributes(location_params)
      end
  end

数据库正在更新,但我仍然收到该错误。

4

2 回答 2

1

我认为你希望 Rails 只是返回到 jQuery,一切都很顺利。但默认情况下,它会尝试将一些 HTML 呈现给 jQuery。

  def update_location
    @car = Car.find(3)
    @car.update_attributes(location_params)
    head :ok
  end
于 2013-05-21T16:34:43.203 回答
1

您可能不应该通过用户 ID 来确定范围;只需使用当前登录的用户并发布到“/current_location”或类似的东西。为了完成您的尝试,您应该使用 jQuery 的post方法在 JavaScript 中向服务器执行 AJAX 提交:

$.post("/my_location", { "_method": "put", lat: xxx, long: yyy }, function () {
  // done!
}, "JSON");
于 2013-05-21T12:45:22.623 回答