Я разрабатываю сложную форму, которая обновляет несколько записей одной модели одновременно, одновременно обновляя связанную модель. Это выглядит примерно так:
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
Просто для небольшого количества справочной информации, модель Page - это общая модель, для которой пользователи смогут создавать столько, сколько им нравится (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 на модели Photo)