как использовать декораторы в рельсах - PullRequest
0 голосов
/ 31 мая 2018

У меня есть некоторые проблемы.я не понимаю, как использовать декораторы в моем проекте.Может быть, кто-то может мне помочь?

personal_information.html.slim

    td.word-break.hidden-value = "*******#{form.dot_application.driver_applicant.ssn.last(4)}"
    td.word-break
      button.show-hidden-info data-field-type="ssn" data-link="#{company_dot_application_show_hidden_informations_path(@dot_application)}"
        | Show SSN

driver_apllicant_decorator.rb

def mask_string(value)
  case value
    when 'ssn'
      "*******#{form.dot_application.driver_applicant.ssn.last(4)}"
    when 'dob'
      "*******#{form.dot_application.driver_applicant.date_of_birth.last(4)}"
    else
      render 403
  end
end

И я не понимаю, как использовать декоратор в моих представлениях в

td.word-break.hidden-value = "*******# {form.dot_application.driver_applicant.ssn.last(4)}"

Как выполнить рефакторинг кода для рендера "**** 1234" с использованием декоратора?

1 Ответ

0 голосов
/ 31 мая 2018

Идея декоратора состоит в том, чтобы просто "расширить модель" методами представления для использования в представлениях - либо , непосредственно вызывая object, либо делегируя методы .Декоратор не выполняет действия контроллера, как render 403;это не его работа.

Например, вы можете написать этот декоратор как:

class DriverApplicantDecorator < Draper::Decorator
  def masked_ssn
    mask_string(object.ssn)
  end

  def masked_date_of_birth
    mask_string(object.date_of_birth)
  end

  private

  def mask_string(value)
    "*******#{value.last(4)}"
  end
end

По вашему мнению, вы можете просто вызывать эти методы - пока вы ссылка на оформленную модель .

Например, это может быть:

td.word-break.hidden-value= form.dot_application.driver_applicant.decorate.masked_ssn

(или в другом месте, как указано выше по ссылке, вы не можетенужно явно вызвать decorate в представлении, подобном этому.)

...