2013-02-13 2 views
4

Опять мне нужна ваша помощь. Теперь мне нужно понять, как я могу удалить с загруженными файлами Carrierwave (в моем случае - изображениями).Carrierwave file delete

модели/attachment.rb:

class Attachment < ActiveRecord::Base 
    belongs_to :attachable, :polymorphic => true 
    attr_accessible :file, :file 
    mount_uploader :file, FileUploader 
end 

модели/post.rb:

class Post < ActiveRecord::Base 
    attr_accessible :content, :title, :attachments_attributes, :_destroy 
    has_many :attachments, :as => :attachable 
    accepts_nested_attributes_for :attachments 
end 

* просмотров/сообщений/_form.html.erb: *

<%= nested_form_for @post, :html=>{:multipart => true } do |f| %> 
    <% if @post.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2> 

     <ul> 
     <% @post.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div id="field"> 
    <%= f.label :Nosaukums %>:<br /><br /> 
    <%= f.text_field :title %><br /><br /> 
    </div> 
    <div id="field"> 
    <%= f.label :Raksts %>:<br /><br /> 
    <%= f.text_area :content %><br /><br /> 
    </div> 

    <%= f.fields_for :attachments do |attachment| %> 
    <% if attachment.object.new_record? %> 
     <%= attachment.file_field :file %> 

    <% else %> 
     <%= image_tag(attachment.object.file.url) %> 
     <%= f.check_box :_destroy %> 
    <% end %> 
    <% end %> 


    <%= f.submit "Publicēt", :id => "button-link" %> 
<% end %> 

Когда я пытаюсь удалить предыдущий файл загруженного У меня есть эта ошибка:

unknown attribute: _destroy 

Может быть, есть проблема, потому что у меня есть несколько загрузок файлов не только один.

ответ

3

Вы вызываете метод на неправильной модели. Ваше файловое крепление находится в приложении.

Ошибка говорит вам, что не так.

undefined method 'remove_file' for #<Post:0x471a320 

Ключевым моментом ошибки является метод вызывается на модели Post, когда он должен быть вызван на модели Attachment.

Возможно, попробуйте ввести флажок в поле для правильной модели.

<%= attachment.check_box :remove_file %> 
4

Согласно docs, этот флажок следует называть remove_file.

+0

Да, я это видел, но когда я пытаюсь 'remove_file', у меня есть эта ошибка:' undefined method 'remove_file' для # ' – RydelHouse

+0

Вы пытаетесь вызвать метод 'remove_file'? Согласно документам, метод называется 'remove_file!' (Отметьте восклицательный знак). – Tomdarkness

+0

Я тоже сделал все это, но есть ошибка. – RydelHouse

3

Это должно быть <% = attachment.check_box: _destroy%>

Это работает для меня

9

Все это не работает для меня, но после того, как рытье я наткнулся this post что действительно помогли. В основном ...

форма (где е ваши объекты форм):

<%= f.check_box :remove_image %> 

Затем, если вы установите флажок и отправить форму, вы получите следующее сообщение об ошибке:

Can't mass-assign protected attributes: remove_image

Что легко решить, просто добавив remove_image в список attr_accessible. В конце это будет выглядеть примерно так:

class Background < ActiveRecord::Base 
    attr_accessible :image, :remove_image 
    belongs_to :user 
    mount_uploader :image, BackgroundUploader 
end 

В моем случае это фоновое изображение, которое принадлежит пользователю.Надеюсь, это поможет :)

+1

thx для наконечника! Я получил его, добавив: remove_image к моему контроллеру params.required ('my_object'). Allow (: remove_image) метод – Toontje