Carrierwave:参数错误 Nil 提供的位置。无法在 Rails 上使用载波 Ruby 为 image_tag 构建 URI

Carrierwave: Argument Error Nil location provided. Can't build URI for an image_tag using carrier wave Ruby on Rails

我在使用 image_tag 时收到 Nil 位置的参数错误。如何使 image_tag 可选,只有在有相应图像时才会显示?这是 Ruby 在 Rails 5.

这是我当前的展示页面浏览量:

<p id="notice"><%= notice %></p>

<%= image_tag @restaurant.image_url %>

<p>
  <strong>Name:</strong>
  <%= @restaurant.name %>
</p>

<p>
  <strong>Address:</strong>
  <%= @restaurant.address %>
</p>

<p>
  <strong>Phone:</strong>
  <%= @restaurant.phone %>
</p>

<p>
  <strong>Website:</strong>
  <%= @restaurant.website %>
</p>

<%= link_to 'Edit', edit_restaurant_path(@restaurant), class: 'btn btn-link' %> |
<%= link_to 'Back', restaurants_path, class: 'btn btn-link' %>

你有两个选择。

1) 仅在有图像要显示时渲染图像标签:

 <% if @restaurant.image_url %>
    <%= image_tag @restaurant.image_url %>
 <% end %>

2) 为 image_url 字段提供默认值:

 <%= image_tag @restaurant.image_url || default_image %>

最好在 model/presenter:

class Image < ApplicationModel

  def image_url
    super || default_image
  end
end

attribute API:

class Image < ApplicationModel
  attribute :image_url, default: default_image
end

使用if条件,如果有图片就显示,如果none,不报错

   <% if @restaurant.image_url? %>
     <%= image_tag @restaurant.image_url %>
   <% end %>

只是为了补充答案。

您可以为此使用 one-liner 代码:

<%= image_tag(@restaurant.image_url) if @restaurant.image_url%>

相当于:

<% if @restaurant.image_url? %>
  <%= image_tag(@restaurant.image_url) %>
<% end %>

<% if @restaurant.image_url? %>
  <%= image_tag @restaurant.image_url %>
<% end %>

资源Carrierwave - Making uploads work across form redisplays

就这些了。

希望对您有所帮助

此错误是因为 image_tag 参数为 nil:

<%= image_tag nil %> # Nil location provided. Can't build URI