0

我想知道如何在 image_tag 中指定完整的 URL src 属性?

目前我使用:

image_tag(object.team.team_logo, :alt => object.team.name)

并且 src 属性被错误地转换为:

http://0.0.0.0:3000/assets/%20http://a.espncdn.com/i/teamlogos/soccer/500/103.png

我尝试运行 rake assets:precompile && rake assets:clean_expired 但该应用程序仍将完整的 url 视为预编译资产。

提前致谢!

4

1 回答 1

2

team_logo在将它们放入数据库之前,您需要正确清理和验证您的值:值的第一个字符object.team.team_logo是空格。

如果您跟踪image_tag实现,您会发现它最终会调用asset_path

def asset_path(source, options = {})
  source = source.to_s
  return "" unless source.present?
  return source if source =~ URI_REGEXP
  #...

您有一个前导空格,team_logo因此URI_REGEXP测试失败,Rails 将预先设置资产路径(并对字符串进行 URL 编码,从而%20表示您的空间)。

你应该做几件事:

  1. 向您的模型添加验证以确保它team_logo始终是格式正确的 URL。
  2. 向模型添加before_validation回调以清除传入team_logo值中的任何杂散空白。
  3. 浏览数据库中的所有team_logo值并清理它们,您可能需要手动修复或删除其中一些。

清理数据后,您image_tag将按预期工作。

我想你可以去掉你认为很讨厌的空白,不应该这样做,除非你需要立即修复以防止业务在接下来的五分钟内失败。即便如此,您仍想清理数据并立即退出“清理视图中的空白”。

于 2013-07-19T22:15:04.750 回答