• 使用update!导致的更新时候的错误信息不显示 ruby on rails


    在图片管理里添加了校验方法之后,发现在更新的时候页面不显示校验报错的信息

    class Picture < ApplicationRecord
      belongs_to :imageable, polymorphic: true
    
      validates_uniqueness_of :name, scope: [:imageable_id, :imageable_type]
    end

     


    update!在校验的时候会抛出异常,导致ajax操作中断,

    Started PATCH "/components/11" for 127.0.0.1 at 2016-09-06 14:31:08 +0800
    Processing by ComponentsController#update as JS
      Parameters: {"utf8"=>"", "component"=>{"name"=>"3131", "alias"=>"", "pictures_attributes"=>[{"id"=>"33", "name"=>"poster", "url"=>"0510000057CE600F6714C06411004555", "md5"=>"9ff2d30b17de8fc75163faff99c18afc"}, {"id"=>"34", "name"=>"poster", "url"=>"0510000057CE60BF6714C063340BE1DC", "md5"=>"c5641765c087043ddc937ac5938c98d2"}, {"name"=>"poster", "url"=>"", "md5"=>""}], "release_id"=>"1", "component_type_id"=>"6", "x_axis"=>"", "y_axis"=>"", "width"=>"", "height"=>"", "unitary"=>"true", "ratio"=>"", "column"=>"", "hints"=>{"left"=>"", "mid"=>"", "right"=>""}, "remark"=>""}, "commit"=>"更新模块", "id"=>"11"}
      User Load (0.3ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
      Component Load (0.2ms)  SELECT  `components`.* FROM `components` WHERE `components`.`id` = 11 LIMIT 1
       (0.1ms)  BEGIN
      Picture Load (0.2ms)  SELECT `pictures`.* FROM `pictures` WHERE `pictures`.`imageable_id` = 11 AND `pictures`.`imageable_type` = 'Component' AND `pictures`.`id` IN (33, 34)
      Picture Exists (0.4ms)  SELECT  1 AS one FROM `pictures` WHERE `pictures`.`name` = BINARY 'poster' AND (`pictures`.`id` != 34) AND `pictures`.`imageable_type` = 'Component' LIMIT 1
      Component Exists (0.2ms)  SELECT  1 AS one FROM `components` WHERE `components`.`name` = BINARY '3131' AND (`components`.`id` != 11) AND `components`.`release_id` = 1 LIMIT 1
       (0.2ms)  ROLLBACK
    Completed 422 Unprocessable Entity in 23ms (ActiveRecord: 3.4ms)
    
    
      
    ActiveRecord::RecordInvalid (验证失败: Pictures name已经被使用):
      

    原因是在controller的update方法里加了!,变成了update!(component_params), 去掉后的方法如下

      def update
        if @component.update(component_params)
          redirect_to @component, notice: 'Component was successfully updated.'
        else
          render :error
        end 
      end

    去掉后的log如下

    Started PATCH "/components/11" for 127.0.0.1 at 2016-09-06 15:21:37 +0800
    Processing by ComponentsController#update as JS
      Parameters: {"utf8"=>"", "component"=>{"name"=>"3131", "alias"=>"", "pictures_attributes"=>[{"id"=>"33", "name"=>"poster", "url"=>"0510000057CE600F6714C06411004555", "md5"=>"9ff2d30b17de8fc75163faff99c18afc"}, {"id"=>"34", "name"=>"poster", "url"=>"0510000057CE60BF6714C063340BE1DC", "md5"=>"c5641765c087043ddc937ac5938c98d2"}, {"name"=>"poster", "url"=>"", "md5"=>""}], "release_id"=>"1", "component_type_id"=>"6", "x_axis"=>"", "y_axis"=>"", "width"=>"", "height"=>"", "unitary"=>"true", "ratio"=>"", "column"=>"", "hints"=>{"left"=>"", "mid"=>"", "right"=>""}, "remark"=>""}, "commit"=>"更新模块", "id"=>"11"}
      User Load (0.2ms)  SELECT  `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
      Component Load (0.1ms)  SELECT  `components`.* FROM `components` WHERE `components`.`id` = 11 LIMIT 1
       (0.1ms)  BEGIN
      Picture Load (0.1ms)  SELECT `pictures`.* FROM `pictures` WHERE `pictures`.`imageable_id` = 11 AND `pictures`.`imageable_type` = 'Component' AND `pictures`.`id` IN (33, 34)
      Picture Exists (0.2ms)  SELECT  1 AS one FROM `pictures` WHERE `pictures`.`name` = BINARY 'poster' AND (`pictures`.`id` != 34) AND `pictures`.`imageable_type` = 'Component' LIMIT 1
      Component Exists (0.2ms)  SELECT  1 AS one FROM `components` WHERE `components`.`name` = BINARY '3131' AND (`components`.`id` != 11) AND `components`.`release_id` = 1 LIMIT 1
       (0.1ms)  ROLLBACK
      Rendering components/error.js.erb
      Picture Load (0.2ms)  SELECT `pictures`.* FROM `pictures` WHERE `pictures`.`imageable_id` = 11 AND `pictures`.`imageable_type` = 'Component'
      Rendered shared/_image.html.erb (2.6ms)
      Rendered shared/_image.html.erb (1.4ms)
      Rendered shared/_image.html.erb (1.5ms)
       (0.2ms)  SELECT `releases`.`version_name`, `releases`.`id` FROM `releases` ORDER BY `releases`.`version_name` DESC
       (0.2ms)  SELECT `component_types`.`name`, `component_types`.`id` FROM `component_types`
      Rendered components/_form.html.erb (36.7ms)
      Rendered components/error.js.erb (52.7ms)
    Completed 200 OK in 111ms (Views: 87.3ms | ActiveRecord: 1.6ms)
  • 相关阅读:
    Http协议原理解析第一篇
    原创:LoadTest系列之参数时,设置提取参数的方式
    原创:LoadTest系列之Local.testtings之Web Test
    Microsoft Web Test Recorder在录制时没有显示
    转:Web 测试的创作与调试技术
    转:Visual Studio进行Web性能测试- Part III
    转:Visual Studio进行Web性能测试- Part II
    转:Visual Studio进行Web性能测试- Part I
    转:使用WITH AS提高性能简化嵌套SQL
    Win7+QTP10.0+IE9无法启动IE的解决方法
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/5846227.html
Copyright © 2020-2023  润新知