2015-09-03 5 views
0

У меня есть два контроллера с обновлением. Оба действия имеют аналогичный код, и я в замешательстве, как удалить дублирование и сделать его сухим. Кодекс климата показывает проблему дублирования в этом. Вот подробности.Код контроллера сухой в рельсах

 
Controller 1: 
respond_to do |format| 
    if @business_profile.update(business_profiles_params) 
    format.html { redirect_to settings_path, notice: t('setting_successful_message') } 
    else 
    format.html { redirect_to settings_path, alert: t('setting_failure_message') 
    end 
end 
 
Controller 2: 
respond_to do |format| 
    if @contact.update(contact_params) 
    format.html { redirect_to contacts_path, notice: t('contact_successful_message') } 
    else 
    format.html { redirect_to contacts_path, alert: t('contact_failure_message') 
    end 
end 

, поэтому я хочу, чтобы это похоже содержание, чтобы быть в одном.

+0

Попробуйте https://github.com/plataformatec/ответчики – max

ответ

1

Они оба пропускают «конец» в блок if, а первый, вероятно, имеет опечатку в «stting_failure_message». Оба имеют отсутствующие фигурные правые фигурные скобки в блоке else. Могут быть более тонкие проблемы.

Получите код запуска и прохождения тестов контроллера, прежде чем беспокоиться об оптимизации, например, извлечение общего метода для вызова из двух методов обновления контроллера. Для чего это стоит, текущая степень дублирования смотрит на меня прямо, на локальную ясность выражения и независимость в изменениях по сравнению с абстракцией для устранения дублирования кода. Посмотрите на эти вопросы для более общего обсуждения передового опыта в высыхающего контроллеров: Best Practices for reusing code between controllers in Ruby on Rails

и наивысшим рейтингом ответ на этот повторно стоимость/польза от добычи вы рассматриваете

DRY Controllers in Rails 3.2

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