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? }
如果这有帮助,请告诉我!