gpt4 book ai didi

ruby-on-rails - 干燥这个 Ruby 代码

转载 作者:太空宇宙 更新时间:2023-11-03 16:19:13 27 4
gpt4 key购买 nike

最近,我开始使用 Rubocop,并一直在尝试更好地思考我的代码,以及我是否可以写得更好。我有一个非常相似的创建和更新方法。 Rubocop 提示该方法的代码行太多 [12/10]。我想知道您将如何在这里遵循 DRY 原则。在我看来,应该将 respond_to 带到它自己的私有(private)方法中。但我不知道什么是最好的方法,因为:

  1. flash 可以是 :success 或 :danger
  2. 一个检查模型是否保存,另一个检查模型是否更新。
  3. 不同的渲染取决于模型是否保存或是否有错误

我也不知道我是否应该让它一个人呆着。不过,它是如此多余的事实确实让我着迷。最终我想要最干净的代码,我只是不确定我是否应该 DRY 这个方法

  def create
@category = Category.new(category_params)

respond_to do |format|
if @category.save
flash[:success] = 'Category Successfully Created'
format.html { redirect_to admin_category_path(@category) }
format.json { render :show, status: :created, location: @category }
else
flash[:danger] = 'Errors in creating category, see below'
format.html { render :new }
format.json { render json: @category.errors, status: :unprocessable_entity }
end
end
end

def update
@category = Category.find(params[:id])

respond_to do |format|
if @category.update(category_params)
flash[:success] = 'Category Successfully updated!'
format.html { redirect_to admin_category_path(@category) }
format.json { render :show, status: :created, location: @category }
else
flash[:danger] = 'Errors in updating category, missing information'
format.html { redirect_to action: 'edit', id: @category.id }
format.json { render json: @category.errors, status: :unprocessable_entity }
end
end
end

最佳答案

尝试从 createupdate 中创建一个方法没有任何意义,因为它们服务于两个截然不同的目的。

相反,您可以考虑以下事项:

  • 你真的需要 json 格式吗?如果您不使用它,您可以安全地删除这些行;
  • update 中删除 @category = Category.find(params[:id]) 并将其移动到 before_action 中的方法>

    before_action :find_category, only: [:edit, :update]

    def find_category
    @category = Category.find(params[:id])
    end
  • 最后但同样重要的是,Rubocop 并不总是有正确的答案:关注清晰度!

关于ruby-on-rails - 干燥这个 Ruby 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37396282/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com