我的rails前端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"
我认为您需要重构这些条件,而不仅仅是将它们移动到另一个地方。例如:有 5 种不同的条件以render "#{@current_task.task_type}_tasks"
结尾,您需要找到这些条件在 comum 中的内容,您不需要那么多条件。看看if
、elsif
、else
和unless
的用法。
我相信您可以在控制器操作中简单地分配一个@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
将是一个符号。执行字符串插值将自动将符号转换为字符串。