从导轨前端 html 苗条中删除条件



我的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 中的内容,您不需要那么多条件。看看ifelsifelseunless的用法。

我相信您可以在控制器操作中简单地分配一个@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将是一个符号。执行字符串插值将自动将符号转换为字符串。

最新更新