在Ruby on Rails 3.2.6中,如何从Paperclip生成的文件名中移除问号?

7

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

当视频上传完成后,默认情况下文件名如下:

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

我认为问号后的10位数字是时间戳。

然而,我将使用的播放器不喜欢文件附件后有任何内容 - 所以在将URL传入播放器之前,我想要去掉问号和其后面的时间戳。

我尝试使用以下Ruby(我想)strip函数:

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

然而,Rails 抛出了一个错误:
wrong number of arguments(1 for 0)

我猜我做错了?还有其他的解决方案吗?我不想完全关闭时间戳,因为我只需要在这种情况下这样做。
谢谢!
4个回答

18
如果您想在给定的附件中随时执行此操作且无需传递额外参数,可以在调用模型中的has_attached_file方法时设置use_timestamp选项。 因此,以Paperclip README中提供的示例为基础:
has_attached_file :avatar,
  :styles => { :medium => "300x300>", :thumb => "100x100>" },
  :default_url => "/images/:style/missing.png",
  :use_timestamp => false

7

希望把这个作为我的问题的答案也没关系(因为它可能对其他人有用),但我后来发现处理这个问题的另一种(更合适的)方法是在显示视图中将false参数添加到URL(),如下所示:

model.paperclipattribute.url(:whateverstyle, false)

时间戳将自动被移除。我认为这更好,因为我建议的“split”方法可能会删除您不打算删除的内容 - 例如,如果您的文件名类似于“Is_this_a_question_?_Yes_it_is.mp4?xxxxxx”,则第一个问号之后的所有内容可能会被删除(即文件将被读取为“Is this a question_”,从而损坏文件名)。我没有测试过,所以我可能是错的。

谢谢,+1,它有效了。这里有一份文档:http://www.rubydoc.info/github/thoughtbot/paperclip/Paperclip%2FAttachment%3Aurl - Volodymyr Balytskyy

5

全局默认关闭它们,只需将此代码添加到config/initializers/paperclip.rb文件中。

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


2

我认为你应该使用split。strip函数不接受任何参数,它只会删除字符串开头和结尾的空格。


太棒了,我知道这只是一些简单的东西!谢谢! - Graeme
@Graeme 如果这个答案对你有用,请点击其分数旁边的复选标记以接受它! - slhck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接