2012-06-17 43 views
0

我試圖在保存簽入Rails項目時創建/更新位置,但遇到了問題。在Rails中創建簽入時創建/更新位置

簽入belongs_to的:位置和,一個位置的has_many:簽入

我使用accepts_nested_attributes_for :location, :allow_destroy => true在我簽入模型,並正嘗試創建了以下這樣一個簽入的時候創建一個位置:

POST "checkin[note]=this-is-great&checkin[user_id]=123&checkin[location_attributes][name]=popeyes&checkin[location_attributes][id]=314" to http://localhost:3000/checkins.json 

然而,每次我運行,它拋出一個錯誤說

與ID = 314 ID找不到位置的簽到=

我不知道我在做什麼正確的..?我希望它創建具有特定ID的位置(如果它不存在),並且如果它存在,則更新該位置(根據location_id)。

位置表有一個ID(主鍵)和名稱(VARCHAR)

的籤表有一個ID(主鍵,自動遞增),和記(VARCHAR)

任何有成功運行accepts_nested_attributes_for?

+0

我不知道如何通過捲曲做,但你的問題似乎涉及到的路由。您正在發送一個'GET'請求,該請求最終將以'show'動作結束,並且您需要'POST'請求​​來實現創建/更新操作。 – Anil

+0

實際上,這是我的請求的簡化版本。應該更加明確,對不起。無論如何,我將它作爲POST發送,但它仍然不允許我創建位置。簽入確實已創建。 –

回答

1

這是我做過什麼來解決這個問題:

我改變位置的ID從小學初級+自動遞增,並停止試圖手動設置。我決定將foursquare_id分開存儲(在不同的列中),而不是將其與正在嘗試存儲的foursquare_id相同。

我簽入模型是這樣的:

belongs_to :location, :autosave => true 
    accepts_nested_attributes_for :location, :allow_destroy => true 

def autosave_associated_records_for_location 
    if Location.find_by_foursquareID(location.foursquareID) 
     self.location = Location.find_by_foursquareID(location.foursquareID) 
    else 
     self.location.save! 
     self.location = self.location 
    end 
    end