我在我的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
感谢。
答案 0 :(得分:0)
我不确定我是否理解你想要什么。
如果你想要一个JUST WRONG风格的网址(即开发者拼错它)时得到一个错误/空字符串,那么你可以试试。
默认情况下,它只是替换has_attached_file
中指定的标记。请参阅interpolate方法。
看起来可以使用选项更改此默认行为。您需要将类似的类实现为Paperclip::Interpolations
。请参阅self.default_options
here。 :interpolator
就是你的选择。
另一方面,如果你想获得特定附件缺少样式的空URL(即正确,但由于某种原因文件不存在 - 也许你只是添加新样式),那么:
我想这可能会影响性能(即使用文件系统甚至是外部服务)。因此,通用用法不是一个好主意。
添加新样式时,您可能应该考虑运行rake任务。 Paperclip已经有rake paperclip:missing_styles
(on 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任务重新处理所有现有附件。