I have some problem. i dont understand how to use decorators in my project. May be someone can help me?
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
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
And i dont understand how to use decorator in my views in
td.word-break.hidden-value = "*******# {form.dot_application.driver_applicant.ssn.last(4)}"
How to refactor the code for render "****1234" right with use decorator?
The idea of a decorator is simply to "extend the model" with presentation methods, for use in views - either by directly calling object
, or delegating methods . A decorator does not perform controller actions, like render 403
; that is not its job.
For instance, you could write this decorator as:
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
In your view, you can then simply call these methods - so long as you are referencing the decorated model .
For example, this could be:
td.word-break.hidden-value= form.dot_application.driver_applicant.decorate.masked_ssn
(Or elsewhere, as per the above link, you may not need to explicitly call decorate
in the view like that.)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.