2013-07-30 81 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