Ruby on rails 为什么rails回形针在更新时删除附件而不单击复选框?

Ruby on rails 为什么rails回形针在更新时删除附件而不单击复选框?,ruby-on-rails,ruby,ruby-on-rails-4,paperclip,Ruby On Rails,Ruby,Ruby On Rails 4,Paperclip,我在RubyonRails网站上的资源上使用了一种回形针删除方法,试图删除一个附件,问题是即使我没有选中删除图像的复选框,它仍然会为我删除它,这是错误的。以下是我所拥有的: idea.rb模型 class Idea < ActiveRecord::Base include PgSearch pg_search_scope :search, :against => [:title, :slug, :idea_type, :body], using: { tse

我在RubyonRails网站上的资源上使用了一种回形针删除方法,试图删除一个附件,问题是即使我没有选中删除图像的复选框,它仍然会为我删除它,这是错误的。以下是我所拥有的:

idea.rb模型

class Idea < ActiveRecord::Base

    include PgSearch
    pg_search_scope :search, :against => [:title, :slug, :idea_type, :body],
    using: { tsearch:{ dictionary: "english" } }

    def self.text_search(query)
      if query.present?
        where("title @@ :q or body @@ :q or idea_type @@ :q", q: query)
      else
        scoped
      end
    end

    paginates_per 6

    has_attached_file :featured_image, :styles => { :medium => "300x300>", :thumb => "100x100>", :crop_cover => "390x240>" }, :default_url => "/images/:style/missing.png"
    validates_attachment_content_type :featured_image, :content_type => /\Aimage\/.*\Z/

    validates :idea_type, :title, :slug, :body, presence: true

    before_save :destroy_image?

    extend FriendlyId
    friendly_id :title, use: [:slugged, :finders]

    def should_generate_new_friendly_id?
        title_changed?
    end

    def img_delete
       @featured_image_delete ||= "0"
    end

    def img_delete=(value)
       @featured_image_delete = value
    end

private

    def destroy_image?
        self.featured_image.clear if @featured_image_delete == "1" and !featured_image.dirty?
    end

end
在我的表格中,删除复选框为:

    def update
        @idea.featured_image.clear
        respond_to do |format|
          if @idea.update(idea_params)
            format.html { redirect_to @idea, notice: 'Idea was successfully updated.' }
            format.json { head :no_content }
          else
            format.html { render action: 'edit' }
            format.json { render json: @idea.errors, status: :unprocessable_entity }
          end
        end
      end

def idea_params
      params.require(:idea).permit(:title, :featured_image, :img_delete, :video, :author_id, :body, :idea_type, :provided_by_logo, author_attributes: [:name,:biography])
    end
<div class="field">
   <h3>Delete image(save idea to delete featured image)</h3>
   <%= f.check_box :img_delete, :label => 'Delete Image' %>
</div>

现在您正在清除
#update
上的图像,无论发生什么情况。试试这个:

models/idea.rb中

class Idea < ActiveRecord::Base
   attr_accessor :featured_image_delete
   before_save(on: :update) do 
      self.featured_image.clear if self.featured_image_delete == "1" and !self.featured_image.dirty?
   end
end
classidea

在控制器中(
#update
)删除
@idea.characterized\u image.clear
,因为这实际上是导致图像被删除的原因。

@idea.characterized\u image.clear
更新中的这一行似乎总是会清除图像。我知道,但这就是在检查字段时清除图像的原因。你的意思是什么“这就是在检查字段时清除它的原因”我看到的是你直接调用clear而没有条件。条件在模型中,所以这就是我感到困惑的原因。
<input id="idea_img_delete" label="Delete Image" name="idea[img_delete]" type="checkbox" value="1">
class Idea < ActiveRecord::Base
   attr_accessor :featured_image_delete
   before_save(on: :update) do 
      self.featured_image.clear if self.featured_image_delete == "1" and !self.featured_image.dirty?
   end
end