Название говорит все. В настоящее время у меня проблема с моделью, с которой я устанавливаю, если модель может иметь вложения или не использовать include Attachable
. Все идет нормально.Carrierwave удалить файл с контроллера
Затем, когда я отобразить список файлов, прикрепленных к конкретной модели, я добавляю ссылку, чтобы удалить его, такие как:
DELETE /posts/:post_id/attachments/:id(.:format) attachments#destroy
Для этой цели я создал AttachmentsController
с методом destroy
, Итак, у меня есть 2 проблемы. Во-первых, как я могу удалить файл с этого контроллера с помощью Carrierwave (для удаления самого файла и записи таблицы)? Во-вторых, так как мой присоединяемый поведение собирается быть штепсельной вилкой в нескольких модели:
DELETE /posts/:post_id/attachments/:id(.:format) attachments#destroy
DELETE /users/:user_id/attachments/:id(.:format) attachments#destroy
...
Как я могу сделать в моем AttachmentsController удалить файл в зависимости от соответствующей модели динамически?
class Attachment < ActiveRecord::Base
include Sluggable
belongs_to :attachable, polymorphic: true
mount_uploader :file, AttachmentUploader
validates :name, presence: true, if: :file?
validates :file, presence: true, if: :name?
end
class AttachmentsController < ApplicationController
before_action :authenticate_user!
def destroy
// Don't know how to remove that file
redirect_to :back
rescue ActionController::RedirectBackError
redirect_to root_path
end
end
Надеюсь, что я был чист.
Благодаря
EDIT:
Ok создать твик на Params хэш, чтобы получить соответствующий объект динамически в AttachmentsController
:
private
def get_attachable_model
params.each do |name, value|
if name =~ /(.+)_id$/
model = name.match(/([^\/.]*)_id$/)
return model[1].classify.constantize
end
end
nil
end