Как заменить nil и «пустую строку» на «None» в Ruby / Rails в перечисляемом объекте? - PullRequest
0 голосов
/ 08 октября 2019

Я обращаюсь к объектам в Rails: Record :: ActiveRecord_Relation и ActionController :: Parameters и превращаю их в полезные хэши, которые будут отображаться в представлениях. Мне нужно заменить ноль и "" на "нет". Я мог бы сделать это не сухим способом и защитить каждую пару ключ / значение Hash с помощью чего-то вроде:

  <div><%= @records_incoming[:time_inserted] || @records_incoming[:time_inserted].empty? ? "none" : @records_incoming[:time_inserted]  %></div>

, но это не похоже на Ruby (предоставлено, я новичок в разработке).

Я пытался обработать это в контроллере следующим образом:


def show
    sent_results = Record.get_sent(params[:request][:trans_uuid]) 

    if !sent_results.empty? 

      incoming_request = params[:request].permit!
      @records_sent = sent_results[0].attributes.each { |k,v| v.class == String && v.empty? || !v ? sent_results[0].attributes[k] = "none" : sent_results[0].attributes[k] } 
      @records_incoming = incoming_request.to_h.map { |k, v| v.empty? || !v ? "none" : v }
      byebug 
    else    
      flash[:error] = 'No record found'
    end 
  end

, но это не изменяет значения nil и пустой строки на 'none'. Если я использую map, я, конечно, получаю массив в качестве возвращаемого значения, но мне нужно сохранить Hash.

Посоветуйте, пожалуйста, какие-нибудь лучшие Rails способы сделать это в целом. Попытка получить 2 хэша в представлениях, которые будут разделены и обработаны.

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Вы можете попробовать использовать presence.

<%= @records_incoming[:time_inserted].presence || "none" %>

. Он обрабатывает два нужных вам случая: @records_incoming[:time_inserted] - ноль или пустая строка, поскольку возвращает получателя, если онpresent?.

0 голосов
/ 08 октября 2019

Вы можете использовать transform_values! для хэша params

try,

incoming_request.transform_values! { |k, v| v.empty? || !v ? "none" : v }
@records_incoming = incoming_request

Ref: https://apidock.com/rails/Hash/transform_values%21

Примечание: transform_values! обновляет хэш на месте

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