Ruby On Rails - 图像标签问题

时间:2013-07-19 21:46:44

标签: ruby-on-rails ruby

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

目前我使用:

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

并且src attibute被错误地转换为:

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

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

提前致谢!

1 个答案:

答案 0 :(得分: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始终是格式正确的网址。
  2. 向模型添加before_validation回调,以清除传入的team_logo值中的任何杂散空格。
  3. 浏览数据库中的所有team_logo值并清理它们,您可能需要手动修复或删除其中的一些值。
  4. 清理完数据后,image_tag将按预期工作。

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