ruby-on-rails - Rails事件记录重复并保存失败

标签 ruby-on-rails carrierwave

我有这个错误:Errno::ENOENT in PicturethingsController#update_profile
No such file or directory - /Users/Baz/rails/myapp/public/uploads/picturething/picture/49/cat.jpg
我正在尝试复制standardpicture记录并将其保存到@ character.profilepicture。我也无法获取@ character.profilepicture保存到数据库(从进入rails控制台后的检查中我知道)。

这是令人反感的方法:

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

最佳答案

@character.profilepicture = standardpicture.dup

问题在于它仅复制ActiveRecord对象的属性,但不会复制磁盘上的实际图片,因此当您这样做时
@character.profilepicture.picture = @character.profilepicture.picture.profile

它会引发No such file or directory错误。尝试使用this gem帮助您在AR记录之间复制CarrierWave附件。

关于ruby-on-rails - Rails事件记录重复并保存失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31387982/

相关文章:

ruby-on-rails - 如何检查resque作业是否完成

ruby-on-rails - Carrierwave - 将图像调整为固定宽度

ruby-on-rails - 雾、Amazon S3 和 Carrierwave Rails 问题

ruby-on-rails - ruby rails : Concatenate results of Mongoid criterias and paging

mysql - 使用 MySQL 在 Rails 中对长文本进行分页

ruby-on-rails - Carrierwave 将 Content-Type 设置为 Octet-Stream

ruby-on-rails - 保存到模型时绕过 Carrierwave 上传程序

ruby-on-rails - CKEditor Carrierwave Cloudinary

ruby-on-rails - Ruby 2.3.1 的 OpenStruct 问题

ruby-on-rails - Ruby on Rails,从 secrets.yml 中检索 API key