gpt4 book ai didi

carrierwave - 未定义的方法 `marked_for_destruction?' CarrierWave,RMagick

转载 作者:行者123 更新时间:2023-12-04 16:13:51 28 4
gpt4 key购买 nike

我正在通过 Carrierwave 上传的裁剪图像的能力。这里是 RailsCast video on Youtube我正在关注的。

但是在上传器中包含 RMagick 后,我收到了:

undefined method `marked_for_destruction?' for #<ImageUploader:0x007fe86634fcf0>

这是什么鬼,我想。我没有在任何地方调用过这个方法。但是,如果它没有定义,让我们定义它!它奏效了!但后来我查看了更多关于这个方法的信息,发现它是内置在 Active Record 自动保存关联模块中的。从文档中,关于这种方法:

Returns whether or not this record will be destroyed as part of the parents save transaction.

Only useful if the :autosave option on the parent is enabled for this associated model.



但是我没有通过 autosave: true对任何物体!

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

2 - 在 RailsCast 教程上,他没有定义这个方法。为什么我必须这样做?

3 - 我通过下面的代码。有什么错误吗?

4 - 如果可能的话,任何人都可以解释这个过程是如何运作的吗?

非常感谢!

产品.rb:
  has_one :image
validates :image, presence: true
mount_uploader :image, ImageUploader

products_controller.rb:
  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:
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

最佳答案

如果您使用的是 Rails 5:

打开new_framework_defaults.rb并改变:

Rails.application.config.active_record.belongs_to_required_by_default = true


Rails.application.config.active_record.belongs_to_required_by_default = false

config.active_record.belongs_to_required_by_default is a boolean value and controls whether a record fails validation if belongs_to association is not present.

关于carrierwave - 未定义的方法 `marked_for_destruction?' CarrierWave,RMagick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41141443/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com