2012-02-11 13 views
6

Birkaç modele görüntü ekleri eklemek için ataç kullanıyorum ve basit bir yönetici arayüzü sağlamak için Activeadmin kullanıyorum. gayet iyi çalışıyorActiveadmin'de bir Paperclip Ekini Silme

form :html => { :enctype => "multipart/form-data"} do |f| 
f.inputs "Details" do 
    f.input :name 
    f.input :subdomain 
end 
f.inputs "General Customisation" do 
    f.input :standalone_background, :hint => (("current image:<br/>").html_safe + f.template.image_tag(f.object.standalone_background.url(:thumb))).html_safe, :as => :file 
end 
end 

:

Ben Resim yükleme için izin verir benim activeadmin modeli dosyasında bu kodu var. Bu şekilde eklediğim tüm resimler isteğe bağlıdır ve bu nedenle kullanıcıya daha önce eklenen bir resmi kaldırma seçeneği sunmayı tercih ediyorum ancak bunu Activeadmin'de nasıl gerçekleştireceğimi bilemiyorum. Gördüğüm tüm örnekler, eklerin ana modelin bir parçası olmaktan ziyade ayrı bir has_many ilişkisi aracılığıyla yönetildiği durumlar içindir.

Bunu yapmanın bir yolu bilen var mı?

cevap

1

Bunu, özel bir yöntem oluşturarak uygulayabilirsiniz. Bu da böyle

index do 
    column "Custom" do |item| 
    link_to "Custom action", "/admin/items/custom_action" 
    end 
end 
1

Diğer bir seçenek eki veya resim için bir statü bayrağı sahip olmaktır olarak bir bağlantı ile özel bir sütun eklemek gerekir

member_action :custom_action, :method => :get do 
//code 
end 

yapılabilir. Düzenlenen nesneyi kaydetmeden önce, resmin bağlantısını kaldırırsınız. senin modelde etkin yönetici görünümünde

form :html => { :enctype => "multipart/form-data"} do |f| 
f.inputs "Details" do 
    f.input :name 
    f.input :subdomain 
end 
f.inputs "General Customisation" do 
    f.input :standalone_background, :hint => (("current image:<br/>").html_safe + f.template.image_tag(f.object.standalone_background.url(:thumb))).html_safe, :as => :file 
    f.input :remove_standalone_background, as: :boolean, required: false, label: "remove standalone background" 
end 
end 

yılında

2

Sen feryat

attr_writer :remove_standalone_background 

def remove_standalone_background 
    @remove_standalone_background || false 
end 

VEYA

attr_accessor_with_default : standalone_background,false 

before_save :before_save_callback 
(raylar 3.2 değer kaybetti) gibi bir durum bayrağı tanımlayabiliriz

Ve

def before_save_callback 
    if self.remove_standalone_background 
    self.remove_standalone_background=nil 
    end 
end 
+0

Aslında standalone_background.clear ile eki silmek için unuttum – kars7e

1

Yardımlarınız için teşekkürler. Bu son çalışma kodu ...

admin/product.rb

f.input :image, required: false, hint: (("Current image:<br/>").html_safe + f.template.image_tag(f.object.image.url(:thumb))).html_safe 
f.input :remove_image, as: :boolean, required: false, label: "Remove Image" 

modeller/product.rb

attr_writer :remove_image 

def remove_image 
    @remove_image || false 
end 

before_validation { self.image.clear if self.remove_image == '1' } 
0

accepts_nested_attributes_for(:foo, allow_destroy: true) rağmen sadece belongs_to gibi ActiveRecord dernekler ile çalışır ataç eki çıkarma çalışmasına benzer şekilde sahip olmak için tasarımından ödünç alabiliriz.

has_attached_file :standalone_background 

def standalone_background_attributes=(attributes) 
    # Marks the attachment for destruction on next save, 
    # if the attributes hash contains a _destroy flag 
    # and a new file was not uploaded at the same time: 
    if has_destroy_flag?(attributes) && !standalone_background.dirty? 
    standalone_background.clear 
    end 
end 

<attachment_name>_attributes= yöntem işaretlemek için Paperclip::Attachment#clear çağırır:

(nitelikler Raylar http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html).

zaten has_attached_file kullanır modeline aşağıdaki gibi bir <attachment_name>_attributes= yazar yöntemi ekleyin bakın nasıl çalıştığını anlamak için iç içe model bir sonraki kaydedildiğinde imha için ekler

Sonraki mevcut'i açın Aynı dosyada

ActiveAdmin.register YourModelHere do 

    permit_params :name, :subdomain, 
    :standalone_background, 
    standalone_background_attributes: [:_destroy] 

ActiveAdmin form bloğuna yuvalanmış bir _destroy onay kutusunu ekleyin:dosyası (uygulamanız için doğru dosya yolunu kullanın) ve kurulum güçlü parametreler <attachment_name>_attributes üzerinde _destroy bayrak iç içe niteliğini izin verecek. Bu onay kutusu semantic_fields_for (veya formtastic tarafından sağlanan diğer iç içe öznitelikler yöntemlerinden biri) kullanılarak <attachment_name>_attributes içine yerleştirilmelidir. Bir ek mevcut olduğunda formunuz şimdi bir silme onay kutusu göstermelidir. Bu onay kutusunu işaretlemek ve geçerli bir form göndermek eki silmeli.

Kaynak: https://github.com/activeadmin/activeadmin/wiki/Deleting-Paperclip-Attachments-with-ActiveAdmin