我正在CodeClimate.com中分析我的代码,我总是在同一行中遇到类似的代码问题:
params.permit(some parameters here)
CodeClimate仅根据代码的质量而不是内容来检测此代码,因此我的质量没有提高。
有没有办法告诉CodeClimate这个代码不重复甚至类似,只要它是参数哈希?
答案 0 :(得分:1)
为什么不重构这些问题?说,你有代码:
class PostsController < ApplicationController
# ...
def resource_params
params.require(:post).permit(:title, :body)
end
end
class CommentsController < ApplicationController
# ...
def resource_params
params.require(:comment).permit(:name, :email, :body)
end
end
您可以将重复代码移动到超类中,只在子类中留下差异:
class ApplicationController < ActionControllerBase
# ...
def resource_params
params.require(resource_name).permit(*permitted_resource_params)
end
end
class PostsController < ApplicationController
# ...
def resource_name
:post
end
def permitted_resource_params
[:title, :body]
end
end
class CommentsController < ApplicationController
# ...
def resource_name
:comment
end
def permitted_resource_params
[:name, :email, :body]
end
end
当然,如果在某些控制器中你有不同的params权限规则 - 你可以在其中重新定义resource_params
方法。
答案 1 :(得分:1)
正如MikiDiet建议的那样,最好是做重构。但这个建议并不能完全解决问题。根据我的经验,CodeClimate将报告代码味道:
def resource_name
:post
end
def permitted_resource_params
[:title, :body]
end
作为跨控制器的代码重复。
答案 2 :(得分:0)
没有办法避免这种代码转换问题,只要它不区分方法的名称,只是它的质量。