Rails:不需要的实例出现在视图中并保存到数据库中

文件上传在users/edit.html.erb页面上处理。 每次上传文件并刷新编辑页面时,会出现更多

div,每次都会使页面上的p.file_field按钮数量翻倍。 似乎正在发生的事情是由用户控制器的编辑操作中的@picturething = @character.picturethings.build引起的。 以前的@picturething实例保存在内存中,并由f.fields_for :picturethings显示。 所以我最后说8

divs。 当我使用其中一个文件将文件保存到数据库时,7个图片将保存到数据库中,每个:picture都带有一个空的:picture ,以及一个用:picture保存到数据库的:picture 。 所以下次页面上有16个

div。 我以前从未见过这种行为.build 。 我该如何纠正?

users_controller.rb

 def edit @character = Character.find_by(callsign: params[:callsign]) @user = @character.sociable @picturething = @character.picturethings.build end def update_pictures @character = Character.find_by(callsign: params[:callsign]) @user = @character.sociable if @character.update_attributes(update_pictures_user_params) redirect_to(edit_user_path(@user)) else redirect_to(edit_user_path(@user)) end end def update_pictures_user_params params.require(:character).permit({picturethings_attributes: :picture}) end 

意见/用户/ edit.html.erb

   

character.rb

 has_many :picturethings accepts_nested_attributes_for :picturethings 

user.rb

 has_one :character, as: :sociable, dependent: :destroy accepts_nested_attributes_for :character 

picturething.rb

 belongs_to :character mount_uploader :picture, PictureUploader 

的routes.rb

 patch '/users/:callsign/update_pictures', to: 'users#update_pictures', as: :update_pictures_user 

参数 (在多个

之后提交新文件时出现)

 "utf8"=>"✓", authenticity_token"=>"...", "character"=>{ "picturethings_attributes"=>{ "0"=>{ "picture"=>#<ActionDispatch::Http::UploadedFile:0x0000010be0e2a8 @tempfile=#, @original_filename="GOT1.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"character[picturethings_attributes][0][picture]\"; filename=\"GOT1.jpeg\"\r\nContent-Type: image/jpeg\r\n">, "id"=>"1"}, "1"=>{"id"=>"2"}, "2"=>{"id"=>"3"}, "3"=>{"id"=>"4"}, "4"=>{"id"=>"5"}, "5"=>{"id"=>"6"}, "6"=>{"id"=>"7"}, "7"=>{"id"=>"8"}, "8"=>{"id"=>"9"}, "9"=>{"id"=>"10"}, "10"=>{"id"=>"11"}, "11"=>{"id"=>"12"}, "12"=>{"id"=>"13"}, "13"=>{"id"=>"14"}, "14"=>{"id"=>"15"}, "15"=>{"id"=>"16"} } }, "commit"=>"Upload pictures", "callsign"=>"bazzer" } 

这是您将空白字段保存到数据库的情况。 您可以在character.rb进行一些validation:

 accepts_nested_attributes_for :picturething, :reject_if => lambda { |a| a[:picture].blank? } 

如果这有帮助,请告诉我!