ruby-on-rails - 如何测试carrierwave文件是否已经更改?

  显示原文与译文双语对照的内容
0 0

我试图测试一个图像是否随载波波在我的代码上变化,但是我找不到方法。 似乎对象被标记为更改,即使文件无效,也没有真正改变。

查看以下输出:

(rdb:1) job.translated_xliff
#<XliffUploader:0xcd8b380.. .>
(rdb:1) job.changed?
false # As expected, didn't changed yet
(rdb:1) job.translated_xliff ="foo"
"foo"
(rdb:1) job.changed?
true # Changed?"foo" is not a valid file. Lets see the file again...
(rdb:1) job.translated_xliff
#<XliffUploader:0xcd8b380.. .> # same object ID!

如何检查这里对象在我的代码中是否确实已经更改?

编辑:我在github上打开一个问题,但仍然没有解决这个问题,还可以找到更多的信息

时间:原作者:2个回答

0 0

内部 Carrierwave define(override) 上载器列上的ActiveRecord getter/setter ( translated_xliff )

现在每次调用setter方法 job.translated_xliff ='foo'( 如 Bensie 提到) 时,它使用 ActiveRecord::Dirty_will_change 方法通知对象更改。!

接着是CarrierWave缓存提供的file

你的场景

 job.translated_xliff
 => uploader 
 job.changed?
 => false
 job.translated_xliff ="foo"
 ## Now your trying to change the object so will_change! notify that 
 ##'translated_xliff' is changing after which Carrierwave try to cache the given 'file'(foo)

现在,在Carriewave开始缓存文件之前,这个问题就像这样执行一个基本检查

 new_file = CarrierWave::SanitizedFile.new(new_file)
 unless new_file.empty?
 ## Then do caching 
 end 

empty? 用于确定提供的值( 在你的情况下,foo ) 是 Path 或者 file,并且两者都不能在你的情况下进行缓存,但对象标记为 changed

因此你得到了

job.changed?
=> true 

因这里,在调用 job.translated_xliff 方法时,它从存储中拉出 file,因为从未缓存提供的value,这可以以在上工作。

因这里,如果你想要实现某种类型的内容,可以能会对 identifier 进行检查并决定是否改变了。

job.translated_xliff.identifier =="foo"

只是建议:)

希望这里帮助

原作者:
...