ruby-on-rails - 如何从模型引用 Assets 管道中的图像?

标签 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline

我有一个带有方法的模型,该方法可将网址返回给人的头像,如下所示:

 def avatar_url
   if self.avatar?
     self.avatar.url # This uses paperclip
   else
     "/images/avatars/none.png"
   end
 end

我正在升级到3.1,因此现在需要通过 Assets 管道引用硬编码的无图像。在 Controller 或 View 中,我只是将其包装在image_path()中,但模型中没有该选项。如何生成图像的正确网址?

最佳答案

我努力将其正确设置了一段时间,所以我想在这里发布答案。尽管以上内容适用于标准默认图像(即每种回形针样式都相同),但是如果您需要多种默认样式,则需要使用其他方法。

如果您想让默认url与 Assets 管道和 Assets 同步保持一致,并希望每种样式使用不同的默认图像,则需要生成没有指纹的 Assets 路径,否则会出现很多AssetNotPrecompiled错误。

像这样:

   :default_url => ActionController::Base.helpers.asset_path("/missing/:style.png", :digest => false)

或在回形针选项中:
   :default_url => lambda { |a| "#{a.instance.create_default_url}" }

然后是模型中具有回形针附件的实例方法:
def create_default_url
   ActionController::Base.helpers.asset_path("/missing/:style.png", :digest => false)
end

在这种情况下,您仍然可以使用插值(:style),但必须关闭 Assets 指纹识别/摘要。

只要您同步不包含摘要的 Assets 和包含摘要的 Assets ,这一切似乎就可以正常工作。

关于ruby-on-rails - 如何从模型引用 Assets 管道中的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7267651/

相关文章:

ruby-on-rails - 如何在gmaps4rails中将 map 居中?

ruby-on-rails - "rake assets:precompile"给出 punc 错误

即使提交了表单,Jquery 绑定(bind)在 'ajax:success' 、 'ajax:error' 或 'ajax:complete' 上也不会执行

ruby-on-rails - 只计算通过 HABTM 关联的数据集

ruby-on-rails - Rails 3.1 可安装引擎 : Assets (Images) not copied to the host application?

ruby-on-rails - rails 闪存:notice doesn't work

mysql - rails : Cannot connect to remote MySQL database

jquery - 满足条件时跳过某些字段的验证

ruby-on-rails - 签名的合法性

ruby-on-rails - 对 Devise Controller 进行子类化后,Rails View 中的实例变量为零