2015-07-13 8 views
8

Bu hatayı aldım: Errno::ENOENT in PicturethingsController#update_profile. Etkin kayıt çoğaltmasını yönlendirir ve hataları kaydeder

No such file or directory - /Users/Baz/rails/myapp/public/uploads/picturething/picture/49/cat.jpg

Ben standardpicture kaydını çoğaltmak ve @ character.profilepicture bu kurtarmaya çalışıyorum. Veritabanına kaydetmek için @ character.profilepicture özelliğini de alamıyorum (rails konsoluna girdikten sonra kontrol etmeyi biliyorum).

picturethings_controller.rb:

def update_profile 
    @character = Character.find_by(callsign: params[:callsign]) 
    standardpicture = Picturething.find_by(id: params[:picid]) 
    @character.build_profilepicture 
    @character.profilepicture.save! 
    @character.profilepicture = standardpicture.dup 
    @character.profilepicture.save! 
    @character.profilepicture.picture.recreate_versions! 
    @character.profilepicture.picture = @character.profilepicture.picture.profile 
    respond_to do |format| 
    format.html do 
     redirect_to @character.sociable 
    end 
    format.js 
    end 
end 

character.rb:

has_many :standardpictures, class_name: "Picturething", 
          inverse_of: :character, 
          foreign_key: "character_standard_id", 
          dependent: :destroy 
has_one :profilepicture, class_name: "Picturething", 
          inverse_of: :character, 
          foreign_key: "character_profile_id", 
          dependent: :destroy 

picturething.rb:

mount_uploader :picture, CharacterpicUploader 
+1

@ karakter.profilepicture.save! 'Karakterini kaldırmak için 'character.build_profilepicture' öğesini kaldırmayı deneyin. – Pavan

+1

Korkarım hala aynı hatayı alıyorum. – Bazley

cevap

6
@character.profilepicture = standardpicture.dup 
Burada

soruna bir yöntemdir

bu sorun sadece ActiveRecord nesnenin özelliklerini taklit ediyor olmasıdır, ancak diskte gerçek resmi kopyalamak olmaz, bu nedenle daha sonra

@character.profilepicture.picture = @character.profilepicture.picture.profile 

yapınca bir No such file or directory hata atar. CarrierWave eklerinizi AR kayıtları arasında kopyalamanıza yardımcı olmak için this gem kullanmayı deneyin.

+1

carrierwave ile aynı fikirdeyim ancak ruby-toolbox'ın [rails file uploads] linkini (https://www.ruby-toolbox.com/categories/rails_file_uploads) – daslicious