条件付きでいくつかのインスタンス変数を設定するメソッドがありますが、リファクタリングしてどのようにリファクタリングしてあまり冗長にするのか不思議です。私の最初のことは、さまざまな条件を複数の小さなヘルパーメソッドに分割することでしたが、それが正しいかどうかはわかりません。どんな助言も役に立つでしょう。Rubyで複数のブール変数を使用してメソッドをリファクタリングする方法
def admin_view
if resource.present?
if resource.ed_level == 'group'
if current_user && (current_user.admin || resource.admins_byemail.include?(current_user.email))
@admin_full = true
@admin_edit = true
@admin_view = true
else
@admin_full = false
@admin_edit = false
@admin_view = false
end
else
if current_user && (current_user.admin || resource.admin_email_list('view').include?(current_user.email.downcase))
if current_user.admin || (resource.admin_email_list('full').include?(current_user.email.downcase) && resource.ed_level != 'group')
@admin_full = true
@admin_edit = true
@admin_view = true
elsif resource.admin_email_list('edit').include?(current_user.email.downcase) && resource.ed_level != 'group'
@admin_full = false
@admin_edit = true
@admin_view = true
elsif resource.admin_email_list('view').include?(current_user.email.downcase) && resource.ed_level != 'group'
@admin_full = false
@admin_edit = false
@admin_view = true
end
else
@admin_full = false
@admin_edit = false
@admin_view = false
end
end
else
redirect_to school_missing_path
end
end
以下の回答に基づいて、コードを次のように更新しました。
def admin_view
if resource.present?
if resource.ed_level == 'group'
if current_user && (current_user.admin || resource.admins_byemail.include?(current_user.email))
set_admin_permissions(full: true, edit: true, view: true)
else
set_admin_permissions(full: false, edit: false, view: false)
end
else
if current_user && (current_user.admin || resource.admin_email_list('view').include?(current_user.email.downcase))
if current_user.admin || (resource.admin_email_list('full').include?(current_user.email.downcase) && resource.ed_level != 'group')
set_admin_permissions(full: true, edit: true, view: true)
elsif resource.admin_email_list('edit').include?(current_user.email.downcase) && resource.ed_level != 'group'
set_admin_permissions(full: false, edit: true, view: true)
elsif resource.admin_email_list('view').include?(current_user.email.downcase) && resource.ed_level != 'group'
set_admin_permissions(full: false, edit: false, view: true)
end
else
set_admin_permissions(full: false, edit: false, view: false)
end
end
else
redirect_to school_missing_path
end
end
private
def set_admin_permissions(full:, edit:, view:)
@admin_full = full
@admin_edit = edit
@admin_view = view
end
私はこの質問が[コードレビュー](http://codereview.stackexchange.com/)でよりよく受け取れると思います。 –
ありがとう...コードレビューについて知りませんでした。 –