从Ruby on Rails 3.2.6中的Paperclip生成的文件中删除问号

我正在使用Paperclip-FFMEG将video文件上传到我的开发环境(当我的项目投入生产时,最终会上传到本地服务器)。

上传video时,默认情况下,文件名如下:

/system/modelnames/paperclipnames/.../mynewfile.mp4?xxxxxxxxxx 

我相信问号后面的10位数字是一个时间戳。

但是,我将用来播放video的播放器不希望在文件附件后有任何内容 – 因此我想在将URL传递给播放器之前删除问号和后面的时间戳。

我试着使用以下Ruby(我认为)strip函数:

 temp_variable = model.paperclipattribute.url(:blah).strip('?')[0] 

但是,Rails会抛出一个错误:

 wrong number of arguments(1 for 0) 

我认为我做错了吗? 还有其他方法吗? 我不想完全关闭时间戳,因为在这种情况下我只需要这样做。

谢谢!

如果要在给定附件的任何位置执行此操作而无需传递额外参数,则可以在模型中调用has_attached_file方法时设置use_timestamp选项。 因此,建立在Paperclip自述文件中给出的示例:

 has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png", :use_timestamp => false 

希望这可以作为我自己的问题的答案(因为它可能对其他偶然发现这个post的人有用),但我已经发现处理这个问题的另一种(更合适的)方法是在视图中显示内容时,将false参数添加到URL(),如下所示:

 model.paperclipattribute.url(:whateverstyle, false) 

时间戳将自动删除。 我认为这样更好,因为我建议的split方法可能会删除您不打算删除的内容 – 例如,如果您的文件被称为“Is_this_a_question _?_ Yes_it_is.mp4?xxxxxx”,那么第一个问号之后的所有内容可能会被删除(即文件将被读作“这是一个问题_”,从而破坏文件名。

我没有测试过这个,所以我可能错了。

在全局默认它们关闭,只需将它放在config / initializers / paperclip.rb文件中。

Paperclip::Attachment.default_options[:use_timestamp] = false

我相信你想使用split 。 strip不接受任何参数,它只删除前导和尾随空格