未定义的方法`marked_for_destruction?' CarrierWave,RMagick
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未定义的方法`marked_for_destruction?' CarrierWave,RMagick相关的知识,希望对你有一定的参考价值。
我正在传递由Carrierwave上传的裁剪图像的功能。这是我关注的RailsCast video on Youtube。
但在将RMagick包含在上传器中之后,我收到了:
undefined method `marked_for_destruction?' for #<ImageUploader:0x007fe86634fcf0>
我觉得这真是太糟糕了。我没有在任何地方调用此方法。但如果没有定义,我们来定义它!它奏效了!但后来我检查了更多有关此方法的信息,发现它内置于Active Record Autosave Association模块中。从docs,关于这个方法:
返回此记录是否将作为父保存事务的一部分销毁。
仅在为此关联模型启用父级上的:autosave选项时才有用。
但我没有通过autosave: true
任何对象!
所以,我的第一个问题 - 默认是以某种方式完成的吗?
2 - 在RailsCast教程中,他没有定义这个方法。我为什么要这样做?
3 - 我传递了我的代码。有错误吗?
4 - 如果可能的话,任何人都能解释一下这个过程是如何运作的吗?
非常感谢!
product.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
是一个布尔值,如果不存在belongs_to关联,则控制记录是否未通过验证。
以上是关于未定义的方法`marked_for_destruction?' CarrierWave,RMagick的主要内容,如果未能解决你的问题,请参考以下文章