Rails 5.2 - Определение типа контента в поле - PullRequest
0 голосов
/ 17 февраля 2019

Разрешение пользователям загружать CSV, а затем я вывожу образец CSV для их проверки.С этим я хочу включить рядом с ним тип поля «предполагаемое» (String, Number и т. Д. - высокий уровень).

В настоящее время я использую:

Просмотр

<p>
  <strong>Spec Sheet SAMPLE (Live Data):</strong>
    <%#= image_tag url_for(@post.cover_photo) %>
    <% preview_data = CSV.foreach(ActiveStorage::Blob.service.send(:path_for, @post.cover_photo.blob.key)).take(10) %>
    <table style="width:50%">
      <tr>
        <% preview_data[0].each do |header| %>
          <th><%= header %> </th>
        <% end %>
      </tr>
          <% preview_data.drop(1).each do |row| %>
            <tr>
              <% row.each do |info| %>
                <td><%= info %> <%= type_sense(info) %></td>
              <% end %>
            </tr>
          <% end %>
    </table>
</p>

Контроллер

def type_sense(content)
  if content.is_a? Integer
    return 'Number' 
  elsif content.is_a? String
    return 'Text'
  end
end

helper_method :type_sense  

КакойЯ понимаю - технически все в массивах, создаваемых через CSV, является строками.

Я замечаю, что как только файл загружен, все в двойных кавычках, что, как я полагаю, превращает его в строку, несмотря на то, что он отображается как исходное значение.

Примечание Я понимаю, что некоторые вещи будут неправильно помечены как другие, но в этом тестовом примере я просто пытаюсь заставить его зарегистрировать 9 цифр как «целое число» и букв как «текст».

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете использовать регулярные выражения:

def type_sense(content)
  case content
  when /\A\d+\z/ then 'Number' #matches a string with only digits in it 
  else 'Text' #if it's not a number, then it's text, I guess you want to count "some123thing" as text
  end
end

Если вы хотите считать буквы (и пробелы?) Как "текст", используйте

when /\A\d+\z/ then 'Number' #matches a string with only digits in it 
when /\A[a-zA-Z\s]+\z/ then 'Text'
else 'Unknown'

Вы можете играть с разнымирегулярные выражения, если вам нужно различное содержимое (например, дата или номер телефона, или что-то, что имеет какой-то шаблон)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...