Я передаю возможность обрезать изображения, загруженные Carrierwave. Вот RailsCast video on Youtube, за которым я следую.неопределенный метод `отмеченный_for_destruction? ' CarrierWave, RMagick
Но после включения RMagick в пользователе, я получил:
undefined method `marked_for_destruction?' for #<ImageUploader:0x007fe86634fcf0>
Что щеколда это я думал. Я не называл этот метод нигде. Но если он не определен, давайте его определим! И это сработало! Но позже я проверил больше об этом методе и обнаружил, что он встроен в Модуль Active Record Autosave. И из документов, об этом методе:
Возвращает, будет ли эта запись уничтожена как часть родителей .
Только полезно, если: для модели включена опция 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
Спасибо, вы могли бы улучшить свой ответ, написав, что это происходит потому, что Rails5 'belongs_to' требуется флаг установлен в' true' по умолчанию, и как это связано с мой вопрос. Бьюсь об заклад, люди будут благодарны за это. Я больше не работаю над этим проектом, поэтому не могу проверить это легко –