Ruby on rails 为什么rails回形针在更新时删除附件而不单击复选框?
我在RubyonRails网站上的资源上使用了一种回形针删除方法,试图删除一个附件,问题是即使我没有选中删除图像的复选框,它仍然会为我删除它,这是错误的。以下是我所拥有的: idea.rb模型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
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