2013-07-30 2 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: Я хочу, чтобы проверить контроллер, который получит 'user_phone' значение парам из' HTTP X Header'. как я могу отправить этот параметр в файл 'my 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

ok педро спасибо примерно ответ. Это хороший код. :) – akbarbin

Смежные вопросы