重新加载表单时,嵌套输入消失

在rails应用程序中,我有一个创建产品页面,其中包含一个嵌套的照片表单。 有validation确保总有照片存在。 但是,当我尝试提交没有照片的表单时,产品表单会在没有照片输入字段的情况下重新呈现。

新产品页面haml

= form_for @product,:url => products_path, :html => { :multipart => true } do |f| - if @product.errors.any? .error_messages %h2 Form is invalid %ul - for message in @product.errors.full_messages %li = message - if @photo.errors.any? .error_messages %h2 Image is invalid %ul - for message in @photo.errors.full_messages %li = message %p = f.label :description = f.text_field :description %p = f.fields_for :photos do |fp| =fp.file_field :image %br %p.button = f.submit 

产品控制器

 class ProductsController  "Sale created!" else render "new", :notice => "Somehting went wrong!" end end def edit @product = Product.find(params[:id]) @photos_left = 4 - @product.photos.count @new_photos = @photos_left.times.map{ @product.photos.build } end def update @product = Product.find(params[:id]) if @product.update_attributes(params[:product]) render "show", :notice => "Sale editted!" else render "edit", :notice => "Failed" end end 

如果保存失败,请在create中添加4.times{ @product.photos.build }

更新您的创建操作,如:

 def create @product = current_user.products.new(params[:product]) @photo = current_user.photos.new(params[:photo]) if @product.valid? @product.save @photo.product_id = @product.id @photo.save render "show", :notice => "Sale created!" else 4.times{ @product.photos.build } #you need to rebuild the photos here render "new", :notice => "Somehting went wrong!" end end 

更新动作也需要同样的改变