参数错误提供了零个位置。无法使用载波Ruby on Rails为image_tag构建URI

时间:2018-11-27 23:54:18

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

使用image_tag时,出现Nil位置参数错误。如何使image_tag仅在存在相应图像时才显示的位置为可选?这是Ruby on 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' %>

3 个答案:

答案 0 :(得分:4)

您有两个选择。

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

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

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

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

最好在模型/演示者中进行:

class Image < ApplicationModel

  def image_url
    super || default_image
  end
end

或使用attribute API

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

答案 1 :(得分:0)

使用if条件,如果有图像将显示,如果没有,则没有错误

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

答案 2 :(得分:0)

只需添加到答案中即可。

您可以为此使用单行代码:

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

等效于:

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

OR

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

资源Carrierwave - Making uploads work across form redisplays

仅此而已。

我希望这会有所帮助