【发布时间】:2015-11-07 09:08:08
【问题描述】:
我正在使用 rails 4、coffeescript、Google Maps API 和 jquery 创建一个旅行计划器应用程序。在我们的旅行计划页面上,我们允许用户在 Google 地图上将多个目的地链接在一起,并根据需要将旅行保存到他们的帐户中。
我们正在使用 3 个主要模型:
旅行 - 包含旅行的名称、开始和结束日期
目的地 - 地图上的位置,由名称和地理坐标(纬度/经度)标识。目的地与旅行没有直接关联。
DestinationOrders - 这是包含旅行目的地顺序的表格(如链表)。这些列是trip_id、destination_id 和order_authority。 Order_authority 将是一个数字,我们使用method described here. 对目的地的顺序进行排序
页面上的一组典型操作是:
- 加载谷歌地图
- 使用 Google 的地点自动完成功能 (javascript) 选择第一个目的地。为第一个目的地在 Google 地图中添加标记
- 添加第二个目的地,放置标记,用路径链接两个目的地
- 添加第三个目的地,放置标记,用路径链接目的地 2 和目的地 3
- 用户点击“保存”将行程存储在他的帐户中
我们对 Rails 还很陌生,考虑到 javascript、控制器和模型之间的来回切换,我想知道解决这个问题的最佳方法。在他单击保存之前,我们不想将旅行与他的帐户相关联。
我们想到的可能方法:
我们是否创建了模型的新实例,然后当用户单击保存时,将所有实例保存到数据库中?这里的问题是在尝试创建DestinationOrder 时,因为它需要尚未创建的行程 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 与他的帐户相关联。但是,如果用户在创建过程中离开了站点,这将创建一个没有关联用户的僵尸之旅,并且需要一些过程来经常清理这些。
处理这种情况最有效的方法是什么?我希望我的解释是有道理的——如果我需要澄清,请告诉我。任何帮助表示赞赏!
【问题讨论】:
标签: javascript jquery ruby-on-rails ruby-on-rails-4 google-maps-api-3