Как предотвратить очень похожий код Ruby if / else? - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть приложение на 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% этого кода - дублированный. Я пытаюсь улучшить то, как я пишу свои приложения, и хотел бы знать, как я могу сделать это лучше.

Моей первоначальной мыслью было взять петли и поместить их в общий вид. Однако при этом переменные не распознаются.

Какие-нибудь предложения о том, как мне подходить к этому сейчас и в будущем?

...