5

我再次需要你的帮助。现在我需要了解如何使用 Carrierwave 上传的文件(在我的情况下 - 图像)中删除。

模型/附件.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

也许有问题,因为我有多个文件上传,而不仅仅是一个。

4

4 回答 4

12

这些都不适合我,但在挖掘之后,我发现这篇文章真的很有帮助。基本上...

表单(其中f是您的表单对象):

<%= f.check_box :remove_image %>

然后,如果您选中该框并提交表单,您将收到以下错误:

无法批量分配受保护的属性:remove_image

remove_image只需将其添加到attr_accessible模型上的列表即可轻松解决。最后它看起来像:

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

在我的情况下,它是属于用户的背景图像。希望这可以帮助 :)

于 2013-09-06T22:45:06.983 回答
5

根据文档,复选框应该被调用remove_file

于 2013-02-13T14:52:30.803 回答
3

它应该是 <%= attachment.check_box :_destroy%>

这个对我有用

于 2013-05-22T20:19:29.723 回答
3

您在错误的模型上调用该方法。您的文件挂载在附件上。

错误告诉你出了什么问题。

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

错误的关键点是当需要在 Attachment 模型上调用该方法时,正在 Post 模型上调用该方法。

也许尝试将复选框的输入范围限定为正确的模型。

<%= attachment.check_box :remove_file %>
于 2013-02-15T00:01:37.310 回答