У меня есть модель пользователя с рядом очень похожих свойств, которые я хочу перечислить, не набирая каждый по отдельности.Ruby: Как высушить аналогичные вызовы атрибутов модели
Таким образом, вместо:
"eye color: #{@user.his_eye_color}"
"hair color: #{@user.his_hair_color}"
"height: #{@user.his_height}"
"weight: #{@user.his_weight}"
...
"eye color: #{@user.her_eye_color}"
"hair color: #{@user.her_hair_color}"
"height: #{@user.her_height}"
"weight: #{@user.her_weight}"
...
Я хотел бы сделать блок или что-то (Proc Lambda Еще сенсорную неясным, что те ...?):
['eye color','hair color','height','weight',...].do |stat|
"#{stat}: #{@user.her_(stat.underscore)}"
end
['eye color','hair color','height','weight',...].do |stat|
"#{stat}: #{@user.his_(stat.underscore)}"
end
Я знаю, что то, что я только что написал выше, является мистическим, магическим и полностью и полностью НЕПРАВИЛЬНЫМ (часть @user.his_(stat.underscore)
), но что я могу сделать так? Мне в основном нужно динамически называть атрибуты моей модели, но я не уверен, как это сделать ...
Любая помощь была бы действительно оценена!
Я использую Rails, и этот метод работает тоже ... кроме того, что я до сих пор не имею доступа к '.underscore'. – neezer
В соответствии с подчеркиванием под названием Rails API «EyeColor» превратится в «eye_color», но оставить «цвет глаз» в одиночку. – Farrel
Я использовал комментарий bta от другого ответа с помощью вашего метода Object # [], и он работает, и он выглядит очень чистым! Благодаря! – neezer