5

もう一度あなたの助けが必要です。次に、Carrierwaveがアップロードしたファイル(私の場合は画像)を使用して削除する方法を理解する必要があります。

models / attachment.rb:

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

models / post.rb:

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

* views / posts / _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

1つだけでなく複数のファイルをアップロードしているため、問題がある可能性があります。

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

間違ったモデルでメソッドを呼び出しています。ファイルマウントは添付ファイルにあります。

エラーは何が悪いのかを教えてくれます。

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

エラーの重要なポイントは、アタッチメントモデルで呼び出す必要があるときに、メソッドがPostモデルで呼び出されていることです。

チェックボックスの入力を正しいモデルにスコープしてみてください。

<%= attachment.check_box :remove_file %>
于 2013-02-15T00:01:37.310 に答える
3

<%= attachment.check_box:_destroy%>である必要があります

わたしにはできる

于 2013-05-22T20:19:29.723 に答える