Rails Admin-使用Carrierwave多次上传的未定义方法' [英] Rails Admin - undefined method `' for using Carrierwave multiple upload

查看:86
本文介绍了Rails Admin-使用Carrierwave多次上传的未定义方法'的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Carrierwave上传多个文件后,我无法在Rails Admin中编辑某些记录。

I can't edit some records in Rails Admin after do a multiple files upload using Carrierwave.

我想在上传文件时配置正确一切正常,但是如果我在保存后尝试编辑,则会发生错误:

I guess that did the correct config, when I upload the files everything goes well, but if I try edit after save the record that error happens:

.log:

14:33:56 web.1    | Started POST "/admin/__better_errors/563c2613b62e459f/variables" for 127.0.0.1 at 2018-11-21 14:33:56 -0200
14:33:56 web.1    |   Tag Load (0.6ms)  SELECT  "tags".* FROM "tags" INNER JOIN "projects_tags" ON "tags"."id" = "projects_tags"."tag_id" WHERE "projects_tags"."project_id" = $1 LIMIT $2  [["project_id", 75],["LIMIT", 11]]
14:33:56 web.1    |   ↳ /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
14:34:50 web.1    | Started GET "/admin/project/75/edit" for 127.0.0.1 at 2018-11-21 14:34:50 -0200
14:34:50 web.1    | Processing by RailsAdmin::MainController#edit as HTML
14:34:50 web.1    |   Parameters: {"model_name"=>"project", "id"=>"75"}
14:34:50 web.1    |   Admin Load (0.4ms)  SELECT  "admins".* FROM "admins" WHERE "admins"."id" = $1 ORDER BY "admins"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
14:34:50 web.1    |   ↳ config/initializers/rails_admin.rb:9
14:34:50 web.1    |   Project Load (2.1ms)  SELECT  "projects".* FROM "projects" WHERE "projects"."id" = $1 ORDER BY "projects"."id" ASC LIMIT $2  [["id", 75], ["LIMIT", 1]]
14:34:50 web.1    |   ↳ /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
14:34:51 web.1    |   Rendering /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/edit.html.haml within layouts/rails_admin/application
14:34:51 web.1    |   Rendered /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/_form_field.html.haml (3.8ms)
14:34:51 web.1    |   Rendered /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/_form_text.html.haml (31.4ms)
14:34:51 web.1    |   Tag Load (0.5ms)  SELECT "tags".* FROM "tags" INNER JOIN "projects_tags" ON "tags"."id" = "projects_tags"."tag_id" WHERE "projects_tags"."project_id" = $1  [["project_id", 75]]
14:34:51 web.1    |   ↳ /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
14:34:51 web.1    |    (0.4ms)  SELECT COUNT(*) FROM "tags"
14:34:51 web.1    |   ↳ /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
14:34:51 web.1    |   Tag Load (0.5ms)  SELECT "tags".* FROM "tags" ORDER BY tags.id desc
14:34:51 web.1    |   ↳ /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/activerecord-5.2.1/lib/active_record/log_subscriber.rb:98
14:34:51 web.1    |   Rendered /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/_form_filtering_multiselect.html.haml (22.4ms)
14:34:51 web.1    |   Rendered /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/_form_text.html.haml (0.4ms)
14:34:51 web.1    |   Rendered /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/_form_text.html.haml (0.4ms)
14:34:51 web.1    |   Rendered /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/_form_text.html.haml (0.4ms)
14:34:51 web.1    |   Rendered /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/_form_file_upload.html.haml (13.9ms)
14:34:51 web.1    |   Rendered /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/_form_multiple_file_upload.html.haml (45.1ms)
14:34:51 web.1    |   Rendered /Users/Atua/.rvm/gems/ruby-2.5.1@atua/gems/rails_admin-1.4.2/app/views/rails_admin/main/edit.html.haml within layouts/rails_admin/application (623.9ms)
14:34:51 web.1    | Completed 500 Internal Server Error in 800ms (ActiveRecord: 3.9ms)
14:34:51 web.1    |
14:34:51 web.1    |
14:34:51 web.1    |
14:34:51 web.1    | NoMethodError - undefined method `' for #<Project:0x00007fb7cfa36900>:
14:34:51 web.1    |

rails_admin.rb:

rails_admin.rb:

config.model Project do
    edit do
      field :title
      field :headline
      field :images, :multiple_carrierwave
    end
end

ProjectImageUploader.rb

ProjectImageUploader.rb

class ProjectImageUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  include CarrierWave::ImageOptimizer
  process optimize: [{ quality: 85 }]
  storage :file

  version :normal do
    process :efficient_conversion => [640, 960]
  end

  def store_dir
    "system/uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  private
    def efficient_conversion(width, height)
      manipulate! do |img|
        img.combine_options do |c|
          c.fuzz        "3%"
          c.trim
          c.resize      "#{width}x#{height}>"
          c.resize      "#{width}x#{height}<"
        end
        img
      end
    end
end

项目模型:

mount_uploaders :images, ProjectImageUploader


推荐答案

我遇到了同样的问题,并将此方法添加到模型中对我有帮助:

I had same problem and add this methods into model helped me:

  attr_accessor :delete_images
  after_validation do
    uploaders = images.delete_if do |uploader|
      if Array(delete_images).include?(uploader.file.identifier)
        uploader.remove!
        true
      end
    end
    write_attribute(:images, uploaders.map { |uploader| uploader.file.identifier })
  end

  def images=(files)
    appended = files.map do |file|
      uploader = _mounter(:images).blank_uploader
      uploader.cache! file
      uploader
    end
    super(images + appended)
  end

这篇关于Rails Admin-使用Carrierwave多次上传的未定义方法'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆