【发布时间】:2011-01-09 12:11:48
【问题描述】:
我正在开发一个复杂的表单,它可以一次更新一个模型的多个记录,同时更新一个关联的模型。有点像这样:
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?我怀疑这个问题与数据库中的 DATA glob 有关,并且可能与它们相关的一些错误。
标签: ruby-on-rails ruby forms activerecord associations