加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Carrierwave文件名在update_attributes上不断

发布时间:2020-12-16 23:10:18 所属栏目:百科 来源:网络整理
导读:我有模型公司和公司已经安装了carrierwave uploader Logo. class Company ActiveRecord::Base mount_uploader :logo,LogoUploader 图片上传工作,但我有update_attributes的问题.当用户想要仅更新公司的描述或标题,而不是上传新图像时 – DB中的文件名值每次
我有模型公司和公司已经安装了carrierwave uploader Logo.
class Company < ActiveRecord::Base
  mount_uploader :logo,LogoUploader

图片上传工作,但我有update_attributes的问题.当用户想要仅更新公司的描述或标题,而不是上传新图像时 – DB中的文件名值每次都在更改.这是一个简单的例子:

1.9.3-p545 :004 > a = Company.last
1.9.3-p545 :005 > a.update_attributes(:title => "test title 2")
 (0.4ms)  BEGIN
  Company Exists (0.9ms)  SELECT 1 AS one FROM `companies` WHERE (`companies`.`title` = BINARY 'test title 2' AND `companies`.`id` != 37) LIMIT 1
  Company Load (0.7ms)  SELECT `companies`.* FROM `companies` WHERE `companies`.`id` = 37 LIMIT 1
   (0.7ms)  UPDATE `companies` SET `title` = 'test title 2',`logo` = '1396206630_1f288be4.jpg',`updated_at` = '2014-03-30 19:10:30' WHERE `companies`.`id` = 37
   (8.1ms)  COMMIT
 => true

为什么即使没有给出新的价值,这里的标识也会以新价值进行更新?怎么避免这个?

解决方法

我经历了同样的事情并且发现上传者类的文件名方法不应该设置新的文件名,除非original_filename出现. CarrierWave有关于文件名的 a relevant wiki page,它没有直接解决这个问题,但足以得到线索.

例如,

每次更新模型时,此代码都会更改文件名字段.

class SampleUploader < CarrierWave::Uploader::Base
  def filename
    "#{Time.now.strftime('%Y%m%d%H%M%S')}.jpg"
  end
end

但是,这个额外的if语句会阻止前一种行为.

class SampleUploader < CarrierWave::Uploader::Base
  def filename
    "#{Time.now.strftime('%Y%m%d%H%M%S')}.jpg" if original_filename.present?
  end
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读