Ruby on rails 无法在Desive Resistation中使用carrierwave添加图像

Ruby on rails 无法在Desive Resistation中使用carrierwave添加图像,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一个具有图片属性的研究所模型。我正在使用carrierwave上传图像 class Institute < ActiveRecord::Base mount_uploader :picture, PictureUploader end 强参数在应用程序控制器中使用 class Institute::ParameterSanitizer < Devise::ParameterSanitizer def sign_up default_params.pe

我有一个具有图片属性的研究所模型。我正在使用carrierwave上传图像

class Institute < ActiveRecord::Base
  mount_uploader :picture, PictureUploader
end
强参数在应用程序控制器中使用

  class Institute::ParameterSanitizer < Devise::ParameterSanitizer
    def sign_up
      default_params.permit(:email,:password,:password_confirmation,:picture)
    end
  end
我花了很长时间在这方面,但不明白为什么会发生这种情况。有没有调试的方法?期待一些解决方案。谢谢

Started PUT "/institutes" for 127.0.0.1 at 2015-10-25 00:06:27 +0530
Processing by Devise::RegistrationsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"EoILK8UjrjjLfyxnFu6ozlqmfHDb/D9fp7CTmLHEjjr5i9h9ZaHGrkG4e5WUhVHMc/jirgu7+vSyH+bRrqWRAg==", "institute"=>{"email"=>"raj@gmail.com", "name"=>"RajeevIn", "phone_no"=>"555555", "address"=>"", "description"=>"", "picture"=>#<ActionDispatch::Http::UploadedFile:0x00000003e34178 @tempfile=#<Tempfile:/tmp/RackMultipart20151025-28776-o2ywzl.jpg>, @original_filename="12redroses_silk.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"institute[picture]\"; filename=\"12redroses_silk.jpg\"\r\nContent-Type: image/jpeg\r\n">, "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "current_password"=>"[FILTERED]"}, "commit"=>"Update"}
  Institute Load (0.6ms)  SELECT  "institutes".* FROM "institutes" WHERE "institutes"."id" = $1  ORDER BY "institutes"."id" ASC LIMIT 1  [["id", 1]]
  Institute Load (0.4ms)  SELECT  "institutes".* FROM "institutes" WHERE "institutes"."id" = $1 LIMIT 1  [["id", 1]]
Unpermitted parameters: name, phone_no, address, description, picture
   (0.2ms)  BEGIN
   (0.2ms)  COMMIT
学院,照片?carrierwave提供的方法即使存在institue.picture,也会给出false。

一些检查方法:

确保使用“保存”!以使其在未保存时引发异常。
看起来您正在执行更新操作,但正在将注册列入白名单。 因此,将ParameterSanitizer类更改为:

 class Institute::ParameterSanitizer < Devise::ParameterSanitizer
    def sign_up
      default_params.permit(:email,:password,:password_confirmation,:picture)
    end

   def account_update
    default_params.permit(:email,:password,:password_confirmation,:picture)
   end
  end
如果尚未完成,您可以添加此项

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def devise_parameter_sanitizer
    if resource_class == Institute
      Institute::ParameterSanitizer.new(Institute, :institute, params)
    else
      super # Use the default one
    end
  end
end

在这一行之后,未经允许的参数:姓名、电话号码、地址、描述、图片不应出现在日志中。如果仍然出现,则表示参数白名单未生效。在这种情况下,请在github上共享一个复制此问题的示例应用程序,我将帮助您修复它

请给我一些rails日志?如何确保在ORM之后加载carrierwave?文件是否保存?保存后,请尝试检查数据库以查看该文件是否存在!文件未保存在数据库中,对吗?PictureUploader.rb中显示的路径在应用程序目录中不存在。就是这个路径。谢谢。但是为什么institute.picture不是零呢?API就是这样工作的。图片是carrierwave方法,所以它的行为与其他AR属性不同。所以,它永远不会为零。你们必须使用carreriwave给出的方法来检查图片是否为零。例如picture.file.exists?如果图像不存在,则应为false。希望有帮助!谢谢。。还没到15岁。否则的话,他们会投票赞成。
institute.picture.url => nil
Started PUT "/institutes" for 127.0.0.1 at 2015-10-25 00:06:27 +0530
Processing by Devise::RegistrationsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"EoILK8UjrjjLfyxnFu6ozlqmfHDb/D9fp7CTmLHEjjr5i9h9ZaHGrkG4e5WUhVHMc/jirgu7+vSyH+bRrqWRAg==", "institute"=>{"email"=>"raj@gmail.com", "name"=>"RajeevIn", "phone_no"=>"555555", "address"=>"", "description"=>"", "picture"=>#<ActionDispatch::Http::UploadedFile:0x00000003e34178 @tempfile=#<Tempfile:/tmp/RackMultipart20151025-28776-o2ywzl.jpg>, @original_filename="12redroses_silk.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"institute[picture]\"; filename=\"12redroses_silk.jpg\"\r\nContent-Type: image/jpeg\r\n">, "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "current_password"=>"[FILTERED]"}, "commit"=>"Update"}
  Institute Load (0.6ms)  SELECT  "institutes".* FROM "institutes" WHERE "institutes"."id" = $1  ORDER BY "institutes"."id" ASC LIMIT 1  [["id", 1]]
  Institute Load (0.4ms)  SELECT  "institutes".* FROM "institutes" WHERE "institutes"."id" = $1 LIMIT 1  [["id", 1]]
Unpermitted parameters: name, phone_no, address, description, picture
   (0.2ms)  BEGIN
   (0.2ms)  COMMIT
 class Institute::ParameterSanitizer < Devise::ParameterSanitizer
    def sign_up
      default_params.permit(:email,:password,:password_confirmation,:picture)
    end

   def account_update
    default_params.permit(:email,:password,:password_confirmation,:picture)
   end
  end
class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def devise_parameter_sanitizer
    if resource_class == Institute
      Institute::ParameterSanitizer.new(Institute, :institute, params)
    else
      super # Use the default one
    end
  end
end