Как обрабатывать Carrierwave имя файла: ноль - PullRequest
0 голосов
/ 25 июня 2018

Я создаю приложение 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 голосов
/ 25 июня 2018

Перед передачей 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>
0 голосов
/ 25 июня 2018

Вы можете использовать,

if @portfolio_item.main_page?
  File.basename(@portfolio_item.main_image.path)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...