Помощник по формату адреса в Rails

Я пытаюсь создать помощника, который будет форматировать адрес из 5 столбцов (add1, add2, add3, add4, add5), чтобы он сжимал любые нули и отображался на экране как таковой

Add1,
Add3,
Add4,
Add5

(добавление 2 было пропущено, так как оно было нулевым)

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

def delivery_address(customer)
@customer =  Customer.find(customer.id) 

if @customer.del_address1.blank? 
  deladdress = "No Delivery Address"
else

    deladdress = @customer.del_address1 
    deladdress = deladdress + "</br>"

  if customer.del_address2.blank?
    else 
    deladdress = deladdress + @customer.del_address2 + ","

  end

  if @customer.del_address3.blank?
    else 
    deladdress = deladdress +  @customer.del_address3 + ","

  end

  if @customer.del_address4.blank?
    else 
    deladdress = deladdress +  @customer.del_address4 + ","

  end

  if @customer.del_address5.blank?
    else 
    deladdress = deladdress +  @customer.del_address5

  end

end

end

Что означает «ввести новый разрыв строки»? Не могли бы вы уточнить?

mbuechmann 27.06.2018 16:22

Добавьте разрыв строки, например, <br> или возврат каретки.

Chris Nash 27.06.2018 16:27

@ChrisNash <br> и \n - две разные вещи. Какой ты хочешь? Пожалуйста, будьте ясны.

Tom Lord 27.06.2018 16:29

@tomLord Я хочу, чтобы кто-нибудь из них дал мне адресный блок текста в несколько строк. Я попробовал оба в моем помощнике, и ни один из них не работал. Obvs у меня был неправильный синтаксис

Chris Nash 27.06.2018 16:32

Поскольку ваша функция является помощником просмотра, подойдет тег <br/>.

mbuechmann 27.06.2018 16:51

На всякий случай, если это будет полезно, в стандартном многострочном формате адреса USPS нет запятых в конце адресной строки. Если предполагается, что адрес доставки читается так же, как на упаковке для доставки в США, конечные запятые следует опустить. Ссылка -> pe.usps.com/text/pub28/28c2_001.htm

Neo 18.07.2018 18:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
944
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

def delivery_address(customer)
  @customer =  Customer.find(customer.id)
  return "No Delivery Address" if @customer.del_address1.blank?

  [
    @customer.del_address1,
    @customer.del_address2,
    @customer.del_address3,
    @customer.del_address4,
    @customer.del_address5
  ].reject(&:blank?).join(",\n")
end

Вместо того, чтобы писать 5 операторов if, вы можете поместить все значения в массив, а затем удалить все пустые значения.

Обратите внимание, что мой код здесь основан на вашем, но это не совсем то, о чем вы спрашивали:

it will compact any nulls

Пустая строка также считается blank? (но "" != nil). Таким образом, этот метод также пропустит эти значения.

Если вы действительно хотите игнорировать значения nil, но оставить пустые строки, замените reject(&:blank?) на compact.

собирался дать ответ компактным, а не пустым, чтобы соответствовать тому, что спросил OP (нулевые значения), хорошее редактирование

Alexis Delahaye 27.06.2018 16:35

Спасибо, Том, однако на странице это отображается так: 23 Taylor Road <br/> Bradford <br/> BD6 1BH

Chris Nash 27.06.2018 16:48

@ChrisNash Как упоминалось выше, вы можете использовать .html_safe. Без минимальный воспроизводимый пример (т.е. как в данном случае вызывается метод?) Проблемы, у меня не было возможности узнать, было ли это решение полным :)

Tom Lord 27.06.2018 17:30
Ответ принят как подходящий

Один важный совет: вы не должны делать никаких запросов к базе данных внутри помощника представления. Это нужно делать только в контроллере. Активная запись уже должна быть передана во вспомогательную функцию. Итак, эта строка

@customer =  Customer.find(customer.id)

можно удалить.

def delivery_address(customer)
  # Use a guard clause, this reduces if nesting
  return 'No Delivery Address' if customer.del_address1.blank? 

  # Collect all parts    
  parts = [customer.del_address1, customer.del_address2, customer.del_address3, customer.del_address4, customer.del_address5]

  # Remove all empty parts.
  # Using a bang method is lighter on memory allocation
  # and will speed up performance.
  parts.reject!(&:blank?) 

  parts.join('<br/>').html_safe
end

Спасибо, но на странице показаны только 5 строк адреса в 1 строке, а не разделены на несколько строк, как я ожидал.

Chris Nash 27.06.2018 16:51

Ах. Я забыл вызов html_safe. Это должно работать сейчас

mbuechmann 27.06.2018 16:59

Я просто перезагрузил страницу, и адрес был идеальным - это радует мое сердце. Спасибо!

Chris Nash 27.06.2018 17:21

Другие вопросы по теме