javascript - 在保存之前临时创建和关联模型 [Rails、Ajax、Google map ]

标签 javascript jquery ruby-on-rails ruby-on-rails-4 google-maps-api-3

我正在使用 Rails 4、coffeescript、Google Maps API 和 jquery 创建一个旅行计划应用程序。在我们的旅行计划页面上,我们允许用户在 Google map 上将多个目的地链接在一起,并根据需要将旅行保存到他们的帐户中。

我们正在使用 3 个主要模型:

行程 - 包含行程名称、开始日期和结束日期

目的地 - map 上的位置,由名称和地理坐标(纬度/经度)标识。目的地与旅行没有直接联系。

DestinationOrders - 该表包含行程中目的地的顺序(如链接列表)。这些列是 trip_id、destination_id 和 order_authority。 Order_authority 将是一个数字,我们使用 method described here. 对目的地顺序进行排序。

页面上的一组典型操作是:

  1. 加载谷歌地图
  2. 使用 Google 的地点自动填充功能 (javascript) 选择第一个目的地。在 Google map 上添加第一个目的地的标记
  3. 添加第二个目的地,放置标记,用路径链接两个目的地
  4. 添加第三个目的地,放置标记,用路径链接目的地 2 和目的地 3
  5. 用户点击“保存”将行程存储在他的帐户中

我们对 Rails 还很陌生,我想知道考虑到 javascript、 Controller 和模型之间的来回,解决这个问题的最佳方法。在他单击“保存”之前,我们不想将行程关联到他的帐户。

我们想到的可能方法: 我们是否创建模型的新实例,然后当用户单击“保存”时,将所有实例保存到数据库中?这里的问题是在尝试创建 DestinationOrder 时,因为它需要尚未创建的行程 ID 和目的地 ID。使用上面的步骤,这将类似于:

  1. trip = Trip.new
  2. 通过 Ajax 向 Controller 发送位置信息(地点),然后:

firstDestination = Destination.new(名称:place.name,纬度:place.geometry.location.lat,长:place.geometry.location.long)

firstDestOrder = DestinationOrder.new

另一个可能的(天真的)解决方案是将所有内容存储在 javascript 变量中,直到用户单击“保存”,然后按顺序发送包含所有目标的 ajax 请求并创建模型。

最后,我们想到了随着用户的旅行而创建和保存行程和目的地的可能性。也就是说,当用户第一次访问该页面时,将创建并保存行程。当用户添加目的地时,该目的地也会被保存。这允许我们传递 DestinationOrder 这些 id,如果用户单击“保存”,我们会将 trip_id 与其帐户相关联。但是,如果用户在创建过程中离开网站,这将创建一个没有关联用户的僵尸之旅,并且需要一些过程来经常清理这些内容。

处理这种情况最有效的方法是什么?我希望我的解释是有道理的 - 如果我需要澄清,请告诉我。如有任何帮助,我们将不胜感激!

最佳答案

我认为你的模式有点奇怪。似乎您真正想做的是创建与目的地相关联的行程,并且每个目的地都有订单。您真正需要的是具有许多直通关联,这将使您能够灵活地在联接表上添加顺序属性。

一个行程通过 DestinationOrder 有许多目的地,这样 DestinationOrder 就充当了目的地模型和行程模型之间的粘合剂(连接模型)。看来这就是您想要做的,但您从未完全说出协会的名称,所以我想我应该澄清一下。

http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

现在介绍操作顺序。 当用户创建旅行时,我会保存该旅行。 创建行程后,您就可以开始向其中添加目的地。 是的,您可能会创建没有目的地的旅行,但这使用户能够返回并继续填写旅行。旅行是需要很长时间来计划的事情,所以我认为即使没有任何目的地,也可以创建旅行,然后在创建目的地时添加目的地。

请参阅此引用How to save data with has_many :through

希望对一些人有帮助。

关于javascript - 在保存之前临时创建和关联模型 [Rails、Ajax、Google map ],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33581049/

相关文章:

javascript - $scope.$apply() 调用是否适合这种情况?

java - 热衷于使用可选参数对 JSNI 函数进行建模?

javascript - 在网站的新页面上保持 jquery 下拉菜单打开

ruby-on-rails - 如何从现有的Ruby代码生成UML图?

ruby-on-rails - 在 Windows 上使用 Ruby 进行开发

ruby-on-rails - 测试 : how to focus on behavior instead of implementation without losing speed?

javascript - onclick 天关闭 Bootstrap 日期选择器

javascript - 图像元素 'clear' 背景颜色不起作用

javascript - 从自动完成的一个选项中检索额外信息

jquery - 如何让 Jquery UI Autocomplete 与 Rails 4 一起工作?