我使用rails 4,coffeescript,Google Maps API和jquery创建旅程规划应用程序。在我们的旅行计划页面上,我们让用户在Google地图上将多个目的地链接在一起,并根据需要保存到他们的帐户。在保存之前临时创建和关联模型[Rails,Ajax,Google Maps]
我们有我们正与3种主要型号有:
旅行 - 包含此行的名称,开始和结束日期
目的地 - 在地图上的位置,通过名称识别和地理坐标(纬度/经度)。目的地不与旅行直接相关。
DestinationOrders - 这是表包含行程中的目的地顺序(如链接列表)。这些列是trip_id,destination_id和order_authority。 Order_authority将是一个数,我们使用排序使用method described here.
一组典型的页面上的操作目标的顺序是:
- 负载的谷歌地图
- 使用谷歌的地方选择第一个目的地自动完成功能(javascript)。标记添加到谷歌地图的第一个目的地
- 添加第二个目的地,放置标志物,具有路径
- 链接两个目的地添加第三个目的地,放置标记,链接目的地2和与目标3路径
- 用户点击“保存”行程存放在他的账户
我们是相当新的轨道,我想知道的最佳方式来处理这给后面和JavaScript之间来回,控制器,和模型。我们不想将旅程与他的帐户关联,直到他点击保存。
我们想到的可能方法: 我们是否创建模型的新实例,然后当用户单击保存时,将所有实例保存到数据库?这里的问题是当试图创建DestinationOrder
时,因为它需要一个trip id和一个尚未创建的目标id。用我们上面的步骤,这将是这样的:
trip = Trip.new
- 发送位置信息(地点)通过Ajax控制器,则:
firstDestination = Destination.new (name: place.name, lat: place.geometry.location.lat, long: place.geometry.location.long)
firstDestOrder = DestinationOrder.new
另一种可能的(天真的)解决方案是将所有存储在JavaScript变量中的内容保存到用户点击保存,然后按顺序发送一个包含所有目的地的ajax请求并创建模型。
最后,我们想到随着用户的出现,创建和保存出行和目的地的可能性。也就是说,当用户第一次访问该页面时,就会创建并保存旅程。当用户添加目的地时,该目的地也将被保存。这允许我们通过DestinationOrder
这些ID,并且如果用户点击保存,我们会将trip_id
与他的账户相关联。但是,如果用户在创建中途离开网站,这将创建一个没有关联用户的僵尸之旅,并且需要一些过程来每隔一段时间清理一次。
处理这种情况的最有效方法是什么?我希望我的解释有意义 - 请告诉我是否需要澄清。任何帮助表示赞赏!