【问题标题】:Ruby on Rails track location in backgroundRuby on Rails 在后台跟踪位置
【发布时间】:2013-05-16 05:40:46
【问题描述】:

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

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

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

我在 RoR 甚至是 Web 开发方面都是一个完整的初学者。 附:我正在使用 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

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

【问题讨论】:

    标签: javascript ruby-on-rails ajax html


    【解决方案1】:

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

      def update_location
        @car = Car.find(3)
        @car.update_attributes(location_params)
        head :ok
      end
    

    【讨论】:

      【解决方案2】:

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

      $.post("/my_location", { "_method": "put", lat: xxx, long: yyy }, function () {
        // done!
      }, "JSON");
      

      【讨论】:

      • 试过了,它就像 $.ajax 一样工作,我收到了问题中描述的 500 错误(我刚刚编辑了问题)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 2017-04-13
      • 2013-07-02
      • 2017-11-24
      • 2020-08-04
      • 1970-01-01
      相关资源
      最近更新 更多