如何处理Carrierwave文件名:无

时间:2018-06-25 03:29:24

标签: ruby-on-rails ruby null carrierwave

我正在构建Ruby on Rails 5.1.6应用程序,并正在使用Carrierwave。我的目标是在上传按钮旁边列出文件名

<div class="form-group">
  <label class="btn btn-primary">
    Upload a main image file <%= form.file_field :main_image, style: 'display:none;' %>
  </label>
    <% unless File.basename(@portfolio_item.main_image.path).nil? %>
       <%= File.basename(@portfolio_item.main_image.path) %>
    <% end %>
</div>

我已经能够使用File.basename(@portfolio_item.thumb_image.path)提取并显示文件名,只要文件已经存在,它就可以很好地工作。

问题是,在new.html.erb page上出现一个no implicit conversion of nil into String错误时,因为还没有文件(这就是新页面的目的)。

我尝试过

unless File.basename(@portfolio_item.main_image.path).nil?
  File.basename(@portfolio_item.main_image.path)
end

以及带有三元语句的某些变体,但是它们都返回相同的no implicit conversion of nil into String错误。

我的目标是如果没有图像,则返回一个字符串:“选择图像”。

我敢肯定有一种简单的方法可以解决这个问题,我只是忽略了它。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用

if @portfolio_item.main_page?
  File.basename(@portfolio_item.main_image.path)
end

答案 1 :(得分:0)

在将image_path传递到File.basename(..)之前,检查它是否存在图像,如果没有,则显示一个字符串select an image..,希望可以解决此问题。

    <div class="form-group">
      <label class="btn btn-primary">
        Upload a main image file <%= form.file_field :main_image, style: 'display:none;' %>
      </label>
        <%= if @portfolio_item.main_image.present?%>
          <%= File.basename(@portfolio_item.main_image.path) %>
        <%else%>
          <p>select an image..</p>
        <%end%>
    </div>