回形针返回非现有样式的URL

时间:2013-03-27 15:26:44

标签: ruby-on-rails paperclip

我在我的Rails模型中添加了回形针样式:

class Asset < ActiveRecord::Base

   has_attached_file :media,
                :styles => {:thumb => "100x100>"}
end

上传的新资源具有相应的缩略图样式,并返回正确的网址:

asset = Asset.last
asset.media(:thumb) = correct_url

但似乎即使是不存在的样式也会返回一个url:

asset = Asset.last
asset.media(:foobar) = some_url

我正在为我的模型添加新样式,例如“large”,如果以前保存的模型实例不存在该样式,我希望它返回错误或空字符串。

如果实例不存在样式,怎样才能让paperclip返回空字符串?

asset = Asset.last #doesn't have style foobar
asset.media(:foobar) = ''   #or could return an error

感谢。

3 个答案:

答案 0 :(得分:0)

我不确定我是否理解你想要什么。

如果你想要一个JUST WRONG风格的网址(即开发者拼错它)时得到一个错误/空字符串,那么你可以试试。

默认情况下,它只是替换has_attached_file中指定的标记。请参阅interpolate方法。

看起来可以使用选项更改此默认行为。您需要将类似的类实现为Paperclip::Interpolations。请参阅self.default_options here:interpolator就是你的选择。

另一方面,如果你想获得特定附件缺少样式的空URL(即正确,但由于某种原因文件不存在 - 也许你只是添加新样式),那么:

我想这可能会影响性能(即使用文件系统甚至是外部服务)。因此,通用用法不是一个好主意。

添加新样式时,您可能应该考虑运行rake任务。 Paperclip已经有rake paperclip:missing_styleson github)来执行此操作。但这可能是一个非常漫长的任务(例如我的托管服务器在完成之前杀死rake进程)。

如果性能对您来说不是问题,那么您可以再次制作自己的插补器。

答案 1 :(得分:0)

  

如果某个实例不存在样式,那么如何获取回形针   返回一个空字符串?

在这种简单的情况下,将:default_url设置为""应该有效:

class Asset < ActiveRecord::Base
  has_attached_file :media, :styles => {:thumb => "100x100>"}, :default_url => ""
end

答案 2 :(得分:0)

我没想到:default_url会处理那个场景,我必须检查。但是,当我真的需要知道样式是否存在时,我已经为你的情况做了什么,如下所示:

flavor = (Faraday.head(post.photo.url(:output)).status == 200) ? :output : :original
url = post.photo.url(flavor)

它会下载您点击的文件,因此请记住这一点。这也假设您不希望使用回形针rake任务重新处理所有现有附件。