【发布时间】:2021-06-01 12:49:48
【问题描述】:
罪行:
app/controllers/tasks_controller.rb:12:3: C: Metrics/AbcSize: 创建的分配分支条件大小太高。 [ 19.26/17] 定义创建 ...
app/controllers/tasks_controller.rb:24:3: C: Metrics/AbcSize: 更新的分配分支条件大小太高。 [ 20.42/17] 定义更新...
检查了 27 个文件,发现了 2 个违规行为
def create
@task = current_user.projects.find(params[:project_id]).tasks.new
@task.title = task_params[:title]
@task.save ? (redirect_to root_url) : (flash[:error] = @task.errors.full_messages) | (render
:new)
end
def update
@task = current_user.tasks.find(params[:id])
@task.title = task_params[:title]
@task.deadline = task_params[:deadline]
@task.save ? (redirect_to root_url) : (flash[:error] = @task.errors.full_messages) | (render
:edit)
end
我如何重构它以解决 rubocop 的罪行?
通过创建私有方法解决问题:
def create
tasknew
tasktitle
@task.save ? (redirect_to root_url) : (flash[:error] = @task.errors.full_messages) | (render :new)
end
def update
taskfind
tasktitle
@task.deadline = task_params[:deadline]
@task.save ? (redirect_to root_url) : (flash[:error] = @task.errors.full_messages) | (render :edit)
end
private
def tasktitle
@task.title = task_params[:title]
end
def taskfind
@task = current_user.tasks.find(params[:id])
end
def tasknew
@task = current_user.projects.find(params[:project_id]).tasks.new
end
【问题讨论】:
-
这些可能太简单了,对 ABC 大小影响不大。如果有的话,它们属于用户模型。分配可能不应该在方法中,方法应该返回一个值。
@task.save ? (redirect_to root_url) : (flash[:error] = @task.errors.full_messages) | (render :new)变成私有方法怎么样?那里发生了很多事情。有按位或吗? -
问题是我在更新中有(渲染:编辑)和在创建中有(渲染:新)
标签: ruby-on-rails ruby model-view-controller refactoring rubocop