0

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

class Asset < ActiveRecord::Base

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

上传的新资产具有适当的拇指样式,这将返回正确的 url:

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

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

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

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

如果实例不存在样式,如何让回形针返回空字符串?

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

谢谢。

4

3 回答 3

0

我不确定我是否明白你到底想要什么。

如果您想在请求 JUST WRONG 样式的 url 时得到一个错误/空字符串(即开发人员拼写错误),那么您可以尝试以下操作。

默认情况下,它只是替换您在has_attached_file. 请参阅插值方法。

看起来可以使用选项更改此默认行为。您需要实现与Paperclip::Interpolations. 见self.default_options 这里:interpolator是给你的。

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

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

添加新样式时,您可能应该考虑运行 rake 任务。回形针已经rake paperclip:missing_styles在 github 上)可以做到这一点。但这可能是一个运行时间很长的任务(例如,我的托管服务器在完成之前杀死了 rake 进程)。

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

于 2013-03-27T15:50:19.560 回答
0

如果实例不存在样式,如何让回形针返回空字符串?

在这种简单的情况下,设置:default_url""应该可以工作:

class Asset < ActiveRecord::Base
  has_attached_file :media, :styles => {:thumb => "100x100>"}, :default_url => ""
end
于 2013-03-27T16:10:28.003 回答
0

我不认为 :default_url 会处理这种情况,我必须检查一下。但是当我真的需要知道一种风格是否存在时,我为你的案例所做的事情如下:

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

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

于 2013-08-22T11:52:36.337 回答