Удалить условия с рельсов переднего конца HTML Slim - PullRequest
0 голосов
/ 08 мая 2018

У меня есть следующий код в моем файле рельсов html.slim. Я хочу удалить эти вложенные if-else условия. Могу ли я реализовать это, переместив эти условия if-else в некоторый вспомогательный класс?

  - if @current_task.task_type == 'econsent'
    - if @patient_organization.organization.identity_verification
      - if @patient_organization.manual_verified
        - if session['kiosk_token']
          = render "#{@current_task.task_type}_tasks"
        - else
          - if @reauthenticated
            = render "#{@current_task.task_type}_tasks"
          -  else
            = render 'relogin_required_screen'
      - else
        = render 'manual_verification_required_screen'
    - else
      - if @patient.self_verified
        - if session['kiosk_token']
          = render "#{@current_task.task_type}_tasks"
        - else
          - if @reauthenticated
            = render "#{@current_task.task_type}_tasks"
          -  else
            = render 'relogin_required_screen'
      - else
        - if @patient.self_verification_req_sent
          = render 'verify_email_after_sent_screen'
        - else
          = render 'verify_email_screen'
  - else
    = render "#{@current_task.task_type}_tasks"

Ответы [ 2 ]

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

Я полагаю, что вы можете просто назначить переменную @to_render в вашем действии контроллера, что-то вроде:

class FooController < ApplicationController

  def bar_action
    ...
    @to_render = get_to_render
    ...
  end

private

  def get_to_render
    if current_task_type == 'econsent'
      if @patient_organization.organization.identity_verification
        if @patient_organization.manual_verified
          return :relogin_required_screen if (!@reauthenticated && !kiosk_token?)
        else
          return :manual_verification_required_screen
        end
      else
        if @patient.self_verified
          return :relogin_required_screen if (!@reauthenticated && !kiosk_token)
        else
          return @patient.self_verification_req_sent ? :verify_email_after_sent_screen : :verify_email_screen
        end
      end
    end
    return "#{current_task_type}_tasks".to_sym
  end

  def kiosk_token?
    session['kiosk_token']
  end

end

Затем в вашем html.slim файле выполните:

= render @to_render

Я не могу вспомнить, но вам может понадобиться:

= render "#{@to_render}"

, поскольку @to_render будет символом. Выполнение интерполяции строки автоматически преобразует символ в строку.

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

Я думаю, вам нужно реорганизовать эти условия, а не просто переместить их в другое место. Например: есть 5 различных условий, которые заканчиваются на render "#{@current_task.task_type}_tasks", вам нужно найти то, что есть в comum, вам не нужно так много условий. Взгляните на использование if, elsif, else и unless.

...