Rails Address Format Helper - PullRequest
       34

Rails Address Format Helper

0 голосов
/ 27 июня 2018

Я пытаюсь создать помощника, который будет форматировать адрес из 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

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

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

@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
0 голосов
/ 27 июня 2018
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 операторов, вы можете поместить все значения в массив, а затем удалить все пустые значения.

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

сожмет любые нули

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

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

...