我使用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
與他的賬戶相關聯。但是,如果用戶在創建中途離開網站,這將創建一個沒有關聯用戶的殭屍之旅,並且需要一些過程來每隔一段時間清理一次。
處理這種情況的最有效方法是什麼?我希望我的解釋有意義 - 請告訴我是否需要澄清。任何幫助表示讚賞!