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

标签 ruby-on-rails ruby-on-rails-3 carrierwave update-attributes

我有模型公司,公司已经安装了载波上传器标志。

class Company < ActiveRecord::Base
  mount_uploader :logo, LogoUploader

图像上传有效,但我对 update_attributes 有问题。当用户只想更新公司的描述或标题,但不想上传新图像时 - 数据库中的文件名值仍然每次都在更改。这是一个简单的例子:
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 

为什么即使没有给出新值,标志也要用新值更新?如何避免这种情况?

最佳答案

我经历了同样的事情,并发现上传者类'filename除非 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

关于ruby-on-rails - Carrierwave 文件名在 update_attributes 上不断变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748385/

相关文章:

javascript - 使用 Carrierwave 的 ajax 请求中的照片 url

ruby-on-rails - 使用 Carrierwave 保存前修改文件名

ruby-on-rails - 给定工作日和自午夜以来的分钟数,生成时间对象

ruby-on-rails - 如何使用 git 复制 rails 应用程序并部署到 heroku

ruby-on-rails - 在 Ruby on Rails 上 curl

ruby - 在 Ruby 控制台中创建便利函数(批处理命令)

ruby-on-rails - 载波上传编码::UndefinedConversionError: "\xFF"从 ASCII-8BIT 到 UTF-8

ruby-on-rails - 使用 Way2sms on rails 发送短信

ruby-on-rails - 如何测试 Rspec 和 Rails 4 中的质量分配错误?

ruby-on-rails - 是否值得开始学习 Rails 2 还是我应该等到 Rails 3 的书籍可用?