首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义方法`marked_for_destruction?‘CarrierWave,RMagick

未定义方法`marked_for_destruction?‘CarrierWave,RMagick
EN

Stack Overflow用户
提问于 2016-12-14 11:28:09
回答 2查看 2.5K关注 0票数 6

我是传递的能力,裁剪图像,上传的载波。这是我正在跟踪的Youtube上的RailsCast视频

但是在上传了RMagick之后,我收到了:

代码语言:javascript
复制
undefined method `marked_for_destruction?' for #<ImageUploader:0x007fe86634fcf0>

我想这是什么鬼东西。我哪儿都没叫过这个方法。但是如果没有定义,就让我们来定义它吧!而且起作用了!但是后来我更多地检查了这个方法,发现它是内置在活动记录自动保存关联模块中的。从医生那里,关于这个方法:

返回此记录是否将作为父级保存事务的一部分销毁。 只有当父模型上的:autosave选项为此关联模型启用时才有用。

但是我没有把autosave: true传递给任何对象!

所以,我的第一个问题--它是默认的吗?

在RailsCast教程中,他没有定义这个方法。我为什么要这么做?

我把我的密码传了出来。有什么错误吗?

4.如果可能的话,是否有人能解释一下这一过程一般是如何运作的?

非常感谢!

product.rb:

代码语言:javascript
复制
  has_one :image
  validates :image, presence: true
  mount_uploader :image, ImageUploader

products_controller.rb:

代码语言:javascript
复制
  def create
    @product = Product.new(product_params)
    @product.category_id = params[:category_id]
    @product.user_id = current_user.id

    respond_to do |format|
      if @product.save
        if params[:product][:image].present?
          format.html { render :crop }
        else
          format.html { redirect_to @product, notice: 'Product was successfully created.' }
          format.json { render :show, status: :created, location: @product }
        end
      else
        format.html { render :new }
        format.json { render json: @product.errors, status: :unprocessable_entity }
      end
    end
  end

image_uploader.rb:

代码语言:javascript
复制
class ImageUploader < CarrierWave::Uploader::Base

  include CarrierWave::RMagick

  def marked_for_destruction?
    @marked_for_destruction
  end

  def mark_for_destruction
    @marked_for_destruction = true
  end

  storage :file

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

  version :large do
    resize_to_limit(600,600)
  end
end
EN

回答 2

Stack Overflow用户

发布于 2018-01-06 18:43:15

如果您使用的是Rails 5:

打开new_framework_defaults.rb并更改:

代码语言:javascript
复制
Rails.application.config.active_record.belongs_to_required_by_default = true

代码语言:javascript
复制
Rails.application.config.active_record.belongs_to_required_by_default = false

config.active_record.belongs_to_required_by_default是一个布尔值,如果不存在belongs_to关联,则控制记录是否失败验证。

票数 0
EN

Stack Overflow用户

发布于 2019-12-20 11:17:29

在您的*_uploader.rb文件中只需编写以下函数:

代码语言:javascript
复制
  def marked_for_destruction?

  end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41141443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档