2013-07-30 48 views
1

我有以下代码:的Rails代码重构

@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? 

你认为哪个代码是更有效和解释? 当你有另一个建议,你也可以分享。

在此先感谢。

+0

我的问题是:在Rails的MINITEST:我想测试一个控制器,让''从HTTP X Header' user_phone'参数值的方式。我怎样才能在'我的video_controller_test.rb'文件中发送这个参数。就像在我的'video_controller.rb'中得到的值为: 'user_phone = request.env ['HTTP_X_MSISDN'] .to_s' –

回答

1

我觉得上一个代码是更好,因为它是很容易理解而且很干净,但是你可以如下太把它写

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

感谢您的回应! :) – akbarbin

-1

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

就重构而言,我会放弃它。也许改变#find_by_id到#find,但就是这样。

+0

如果您只是更改find​​_by_id来查找,则会发生错误。看看我的答案如何处理它。 –

+0

你是对的,演奏得好! :) – jurglic

+0

好的谢谢你的回应。 :) – akbarbin

5

我会做这样的:

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

好佩德罗感谢回答。这是很好的代码。 :) – akbarbin