2013-03-27 43 views
0

我添加回形针风格,以我的Rails模型网址:回形针返回非现有样式

asset = Asset.last 
asset.media(:thumb) = correct_url 
:上载有适当的拇指风格,这将返回正确的URL

class Asset < ActiveRecord::Base 

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

新资产

但它好像甚至风格,不存在返回网址:

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

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

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

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

谢谢。

回答

0

我不知道,如果我明白你到底想要什么。

如果你想要求一个URL为JUST WRONG风格(即开发者拼错它)时,错误/空字符串,那么你可以尝试下面。

默认情况下,它只是替换has_attached_file中指定的标签。见interpolate方法。

看起来可以通过选项更改此默认行为。您需要实施类似Paperclip::Interpolations的类。见self.default_optionshere:interpolator是适合你的。

在另一方面,如果你想获得空网址失踪样式特定的附件(即正确的,但不是文件存在某种原因 - 也许你刚刚增加新的款式),则:

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

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

如果性能不是您的问题,您也可以制作自己的插补器。

+0

感谢。是的,你的第二种情况是我想要的。我添加了一种新的风格。如果我要求该风格的URL路径,但该风格不存在该特定的附件,为什么我会得到一个URL路径? – user1280971 2013-03-27 17:49:26

+0

因此,正如我的回答中所写 - 这是回形针的默认实现。您可以像第一种情况一样使用自己的插补器覆盖它。 – 2013-03-27 19:23:07

+0

感谢您的解释,但尼府 – user1280971 2013-04-11 19:40:53

0

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

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

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

我想我只是惊讶,它返回任何东西。如果我添加新的样式,我不希望以前保存的附件返回任何不符合附件要求的样式。 – user1280971 2013-03-27 17:13:01

+0

如果我是正确的,:DEFAULT_URL工作,如果连接是在所有缺失(即你没有分配到模型图片)。所以,与缺失的样式无关。 – 2013-03-27 17:48:16

0

我没想到:DEFAULT_URL将处理那种情况下,我得查。但我已经为你所做的那样,当我真正需要知道的样式是否存在是类似以下内容:

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

它下载您采取一击这么记住的文件。这也假定您不想用回形针耙任务重新处理所有现有的附件。