Невозможно сохранить объект с изображением после использования драгоценного камня cancancan - PullRequest
0 голосов
/ 19 февраля 2019

Мне удалось сохранить объекты с изображениями.Но после интеграции cancancan gem его невозможно сохранить:

Aws :: S3 :: Errors :: AccessDenied в EventsController # new Access Denied

image = event_params[:cover_image]

  if image.present?
    raise "Unacceptable file format" if !image.content_type.include?("image/")

    original_filename =  image.original_filename
    photo_extname = File.extname(original_filename).downcase
    raise "Please upload images with .jpg or .png format."  unless [".jpg", ".jpeg", ".png"].include?(photo_extname)
  end


  event = Event.new(event_params.except(:client))
  event.event_wf_balance_payment_enabled = session[:event_preflight]['event_wf_balance_payment_enabled'].present?
  event.video_wf_asset_request_enabled = session[:event_preflight]['video_wf_asset_request_enabled'].present?

  # error is here,cannot save
  event.save

  event.vg_enable_video_workflow if session[:event_preflight]['video_wf_state_enabled'].present?
  event.vg_enable_photo_workflow if session[:event_preflight]['photo_wf_state_enabled'].present?

  if image.present?
    safe_name = SafeName.prepare(image.original_filename)
    event.cover_image_file_name = image.original_filename
    event.cover_image_content_type = image.content_type
    event.cover_image_file_size = image.size
    event.cover_image_status = Event::COVER_IMAGE_STATUSES[:upload_success]
    event.save
    photo_extname_lowercase = photo_extname.downcase

    credentials = Aws::Credentials.new(Rails.application.secrets.aws['aws_access_key_id'], Rails.application.secrets.aws['aws_secret_access_key'])
    aws_s3_resource = Aws::S3::Resource.new(region: Rails.application.secrets.aws['aws_region'], credentials: credentials)
    bucket = aws_s3_resource.bucket(Rails.application.secrets.aws['aws_s3_assets_bucket'])
    cover_photos_dir = Rails.application.secrets.aws['aws_s3_event_cover_photos_dir']
    id_hash = Digest::MD5.hexdigest(event.id.to_s)
    unique_filename = "#{id_hash}-#{safe_name}_original#{photo_extname_lowercase}"
    key = "#{cover_photos_dir}/#{event.id}/#{unique_filename}"
    object = bucket.object(key)
    object.put(body: image)
  end

Кто-нибудь знает, почему я получаю такую ​​ошибку?Я попытался отладить, но все, что я могу получить, это то, что невозможно сохранить объект события, но когда я отправляю данные без изображения, все в порядке.

...