【问题标题】:Rails 5, "nil is not a valid asset source"Rails 5,“nil 不是有效的资产来源”
【发布时间】:2016-05-30 16:18:00
【问题描述】:

我刚刚升级到 Rails 5,在尝试显示图像时遇到了一个奇怪的问题。

我有 Rails 4 的确切代码:

<%= image_tag article.image_url(:thumb) %>

但升级后我得到:

nil is not a valid asset source

在升级到 Rails 5 之前,我没有遇到任何类似的问题

这里有什么问题?可能是其他问题而不是 Rails 升级问题?

【问题讨论】:

  • 您似乎只是在此记录中没有图像。你能确认一下吗?

标签: ruby-on-rails ruby ruby-on-rails-5


【解决方案1】:

问题是我试图显示一个不存在的图像。

添加unless article.image.blank? 解决了它:

<%= image_tag article.image_url(:thumb) unless article.image.blank? %>

编辑:Rails 4 中,这只会呈现任何内容而不会出现错误,而在 Rails 5 会引发错误。所以这实际上是一个升级问题。

非常感谢@BookOfGreg 指出这一点。

【讨论】:

  • 对于那些没有使用carrierwave的人:在rails 4中,这会渲染出一个空的img标签,在rails 5中它会在nil上升高,所以有一点区别。
  • 团结一致。 .
  • 同上。此外,不存在的默认图像会在 Rails 5 中引发此错误,并且可能需要花费大量时间才能找到原因。
  • 如果即使图片不可用,你仍然需要创建&lt;img&gt;标签,你可以使用content_tag(:img, nil, src: "...", alt: "...")(可能是因为你稍后用JavaScript设置了它的来源)。
  • 最好避开unless。上面的代码可以改成&lt;%= image_tag article.image_url(:thumb) if article.image.present? %&gt;
【解决方案2】:

我不知道这是否是紧凑的解决方案,但这段代码可以工作。

在您的上传器中激活后备方法。

  def default_url
    "/assets/fallback/" + [version_name, "default.png"].compact.join('_')
  end

希望这会对你有所帮助。

干杯(y)

【讨论】:

  • 我已经解决了,但是我忘记更新这篇文章了。还是谢谢你。
【解决方案3】:

试试这个,你需要在你的代码中添加 unless 条件。您需要添加以下代码

【讨论】:

    【解决方案4】:

    我希望这段代码 sn-p 可以帮助那些未来的读者。

    <td><%= image_tag image.picture.url, size: "100x100" unless image.picture.url.blank? %></td>
    

    没有 unless image.picture.url.blank? 部分代码,

    “nil 不是有效的资产来源”

    上传空图片时显示。

    【讨论】:

      猜你喜欢
      • 2017-04-10
      • 1970-01-01
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 2013-07-12
      相关资源
      最近更新 更多