我正在開發一個複雜的表單,一次更新一個模型的幾個記錄,同時更新相關的模型。它看起來有點像這樣:Rails複雜的表單一次編輯多條記錄與協會
class Sport
has_one :photo
end
class Photo
belongs_to :sport
acts_as_fleximage
end
class Page
# the page is not related to either of the previous models
end
只是爲了一點背景資料,頁面模型是一個通用模型,該用戶將能夠創建多達他們喜歡(一個CMS)。此外,他們在註冊時會獲得少量強制性「系統」頁面。當他們嘗試編輯系統頁面時,表單與通用頁面表單略有不同。
其中一個系統頁面是「體育」頁面。他們可以在每個運動項目中添加一些文字(保存在「運動」模型中)並上傳照片(保存在「照片」模型中)。
我製作了一個表格,似乎在做這個伎倆。我不會發布的觀點,但這裏是它發出的參數的例子:
:id => 1
:page => {"title"=>"Our sports"}
:sport => {
"1" => {
"description" => "<p>I love playing hockey...</p>"
"photo_attributes" => {
"image_file" => #<File:/tmp/RackMultipart20100126-955-k0gxu8-0>,
"description" => "Me in my hockey kit"
}
},
"2" => { #more of the same}
}
現在,爲了保存這一切,我的控制器/動作看起來是這樣的:
def update_sports_page
@page = Page.find params[:id]
@page.update_attributes params[:page]
Sport.update(params[:sport].keys, params[:sport].values)
redirect_to #etc
end
現在當我編輯體育頁面時,除了更新照片之外,所有內容都可以正確保存和更新,除了更新數據庫中的現有記錄外,它僅創建一條新記錄並將舊記錄的sport_id
設置爲NULL
。
因此,最終,經過多次編輯,數據庫中存在大量的孤立記錄。
任何人都可以發現我在這裏做錯了嗎?
(PS,如果它是相關的,我使用fleximage在照片模式)
您是否嘗試過暫時將'image_file'字段更改爲URL?我懷疑這個問題是與數據庫中的數據空間有關,也可能是與它們有關的一些錯誤。 – 2010-01-26 17:39:53