Rails重构代码

时间:2013-07-30 06:43:06

标签: ruby-on-rails controller refactoring

我的代码如下:

  @brand = Brand.find_by_id(params[:id])
  if @brand.nil?
    flash[:error] = Flash.record_not_found
    redirect_to admin_brands_path
  end

另一个变化如下:

@brand = Brand.find_by_id(params[:id])
return(flash[:error] = Flash.record_not_found and redirect_to admin_brands_path) if @brand.nil?

您认为哪种代码更有效并且可以解释? 当你有另一个建议你也可以分享。

提前致谢。

3 个答案:

答案 0 :(得分:5)

我会这样做:

def action
  @brand = Brand.find(params[:id])
rescue ActiveRecord::RecordNotFound
  redirect_to admin_brands_path, flash: {error: Flash.record_not_found}
end

答案 1 :(得分:1)

我觉得上面的一个代码更好,因为它易于理解且非常干净,但是你也可以把它写成以下代码

unless @brand = Brand.find_by_id(params[:id])
  flash[:error] = Flash.record_not_found
  redirect_to admin_brands_path
end

答案 2 :(得分:-1)

第一个选项肯定是更好 - 毫无疑问。它是可读的,内部没有太多的逻辑,它只做控制器应该做的事情。拥有最少的代码行确实不是一个好的指标。

就重构而言,我会保持原样。也许将#find_by_id更改为#find,但就是这样。