У меня есть приложение на Rails 5, где у меня есть много операторов if / else, которые почти выводят одно и то же содержимое. Вот пример:
- if @url.include?('coaches')
.page-container
.container.margin-bottom-xs.spacer-minus
.row.spacer-md
.col-md-12
.margin-bottom-sm
.row
- @am_coaches.each do |user|
.col-md-4
.small-card.shadow.margin-bottom-sm
= image_tag(user.avatar.url, class: 'medium-img')
= link_to [user.team, user] do
.small-overlay
.row
.col-md-11
.post-category
- if user.city?
= user.city
|,
- if user.country?
= user.country
.post-title.text-default
= user.name
.post-time-ago.text-muted
- unless user.age_group.blank?
= user.age_group
|,
= user.team.name
.col-md-1.text-right
- if user.facebook_url
.post-category
= link_to "http://www.facebook.com/#{user.facebook_url}",
target: '_blank'
i.icon-facebook
- if user.twitter_url
.post-category
= link_to "http://www.twitter.com/#{user.twitter_url}",
target: '_blank'
i.icon-twitter
- if user.instagram_handle
.post-category
= link_to "http://www.instagram.com/#{user.instagram_handle}",
target: '_blank'
i.icon-instagram
- elsif @url.include?('users')
.spacer-lg
- @skills.uniq.sort.reverse.each do |skill|
.container.spacer-sm
span.section-heading.text-semibold
= skill.humanize
.margin-bottom-sm
.row.spacer-md
- @am_users[skill].each do |user|
.col-md-4
.small-card.shadow.margin-bottom-sm
= image_tag(user.avatar.url, class: 'medium-img')
= link_to [user.team, user] do
.small-overlay
.row
.col-md-11
.post-category
- if user.city?
= user.city
|,
- if user.country?
= user.country
.post-title.text-default
= user.name
.post-time-ago.text-muted
- unless user.age_group.blank?
= user.age_group
|,
= user.team.name
.col-md-1.text-right
- if user.facebook_url
.post-category
= link_to "http://www.facebook.com/#{user.facebook_url}",
target: '_blank'
i.icon-facebook
- if user.twitter_url
.post-category
= link_to "http://www.twitter.com/#{user.twitter_url}",
target: '_blank'
i.icon-twitter
- if user.instagram_handle
.post-category
= link_to "http://www.instagram.com/#{user.instagram_handle}",
target: '_blank'
i.icon-instagram
Как видите, 80% этого кода - дублированный. Я пытаюсь улучшить то, как я пишу свои приложения, и хотел бы знать, как я могу сделать это лучше.
Моей первоначальной мыслью было взять петли и поместить их в общий вид. Однако при этом переменные не распознаются.
Какие-нибудь предложения о том, как мне подходить к этому сейчас и в будущем?