0

我使用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.

一組典型的頁面上的操作目標的順序是:

  1. 負載的谷歌地圖
  2. 使用谷歌的地方選擇第一個目的地自動完成功能(javascript)。標記添加到谷歌地圖的第一個目的地
  3. 添加第二個目的地,放置標誌物,具有路徑
  4. 鏈接兩個目的地添加第三個目的地,放置標記,鏈接目的地2和與目標3路徑
  5. 用戶點擊「保存」行程存放在他的賬戶

我們是相當新的軌道,我想知道的最佳方式來處理這給後面和JavaScript之間來回,控制器,和模型。我們不想將旅程與他的帳戶關聯,直到他點擊保存。

我們想到的可能方法: 我們是否創建模型的新實例,然後當用戶單擊保存時,將所有實例保存到數據庫?這裏的問題是當試圖創建DestinationOrder時,因爲它需要一個trip id和一個尚未創建的目標id。用我們上面的步驟,這將是這樣的:

  1. trip = Trip.new
  2. 發送位置信息(地點)通過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與他的賬戶相關聯。但是,如果用戶在創建中途離開網站,這將創建一個沒有關聯用戶的殭屍之旅,並且需要一些過程來每隔一段時間清理一次。

處理這種情況的最有效方法是什麼?我希望我的解釋有意義 - 請告訴我是否需要澄清。任何幫助表示讚賞!

回答

1

我認爲你的模式有點奇怪。看起來像你真正想要做的是創建與目的地相關聯的旅程,並且每個目的地都有訂單。你真正想要的是擁有很多直通關聯,這會給你在連接表上添加順序屬性的靈活性。

旅行通過DestinationOrder有很多目的地,這種方式DestinationOrder作爲Destination模型和Trip模型之間的粘合(連接模型)。這似乎就是你想要做的,但你從來沒有說過這個協會的名字,所以我想我會澄清這一點。

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

我們經營秩序。 當用戶創建旅程時,我會保存該旅程。 一旦創建了該行程,您就可以開始爲其添加目的地。 是的tou可能會創建沒有目的地的旅行,但是可以讓用戶返回並繼續填寫行程。旅行是需要很長時間才能計劃的,所以我認爲即使旅行沒有任何目的地也可以創建旅行,然後在創建目的地時添加目的地。

參考見本How to save data with has_many :through

希望幫助一些。

相關問題