Paperclip-nadpisywanie

Witam,

Zrobiłem sobie scaffoldem “blog” w których mam możliwość dodawać 3 plików jpg. Mam dwa modele article oraz asset gdzie relacja między nimi jest jeden do wielu. Wszystko działa ładnie tylko nie wiem jak zmusić paperclip żeby podczas edycji article i wybraniu nowego zdjęcia(mam już np. załadowane 3) nadpisywał a nie dodawał kolejne.

Pozdrawiam,

Popatrz sobie tutaj:


i tu

generalnie jak dasz te same nazwy relacji co w f.file_field powinno Ci nadpisac stare fotki

hmm jakoś mi to nadal nie wychodzi
korzystałem z tego tutka… http://www.emersonlackey.com/article/rails-paperclip-multiple-file-uploads

Poka model, kontroller i formularz.

Model:

app/models/asset.rb

belongs_to :article
has_attached_file :image,
:styles => {
:thumb=> “100x100#”,
:small => “300x300>”,
:large => “600x600>”
}

app/models/article.rb

has_many :assets, :dependent => :destroy
accepts_nested_attributes_for :assets, allow destroy => true

Kontroler:

apps/controllers/articles_controller.rb

def new
@article = Article.new()
5.times { @article.assets.build }
end

def edit
@article = Article.find(params[:id])
5.times { @article.assets.build }
end

Formularz(partial)

apps/views/articles/_form.html.erb

Make sure your form is multipart with :html => { :multipart => true }

    <%= f.fields_for :assets do |asset| %>
    
       <% if asset.object.new_record? %>
             <%= asset.file_field :image %>
       <% end %>

   <% end %>
 <% f.fields_for :assets do |asset| %>
    
      <% unless asset.object.new_record? %>
    
            <div class="thumbnail">
                    <%= link_to( image_tag(asset.object.image.url(:thumb)), asset.object.image.url(:original) ) %>
                    <%= asset.check_box :_delete %>
            </div>
            
      <% end %>        
    
 <% end %>

A gdzie masz akcje update i create w kontrolerze?

Bez nich raczej Ci nie zadziała …
Poza tym wydaje mi się, że w edit nie powinieneś już budować assetów bo już istnieją ( chodzi mi o linijke “5.times {…}” )

–Edit–

A odpowiadając na Twoje pytanie, tutorial nie pokazuje jak nadpisać assety
najprostsze rozwiazanie, jakie przychdzi mi do głowy to po prostu skasować stare assety, przed utworzeniem nowych

cos w tym stylu:

[code=“ruby”] # app/models/post

before_save :destroy_old_assets

def destroy_old_assets
self.assets.each(&:destroy)
end[/code]
Kod jest dosyć naiwny bo przy każdym updejcie kasuje stare assety, ale powinien działać
możesz też zastosować myk z checkboxem “:_delete” (tak jak w tutorialu), który jest bardziej elestyczną metodą osiągnięcia tego co potrzebujesz

Dzięki za odpowiedź.
Postaram się jeszcze pokombinować według wskazówek.