Я часто строю контроллеры, где мне нужно несколько методов (в дополнение к индексированию, редактированию, показу и т. Д.).Большую часть времени действия, которые я желаю, могли бы быть сведены к показу, поскольку они являются простыми операциями GET, однако я не хочу помещать слишком много логики в какое-либо одно действие контроллера.
Вот краткий пример двухразные способы достижения одного и того же ...
class TwitterFriendController < ApplicationController
## lump everything into show?
def show
if params[:id] == "follow"
users = current_user.following
elsif params[:id] == "follow_me"
users = current_user.users_who_follow_me
elsif params[:id] == "following_follow_me"
users = current_user.following_who_follow_me
elsif params[:id] == "following_who_do_not_follow_me"
users = current_user.following_who_do_not_follow_me
...
end
respond_with do |format|
format.json do {...}
end
end
## or split everything out into separate methods, this requires
additional routing
def following
...
end
def users_who_follow_me
...
end
def following_who_follow_me
...
end
def following_who_do_not_follow_me
...
end
end
Все в шоу
- тонна логики в одном методе
- СУХОЙ?# много дополнительного кода, необходимого для логики
- Меньше маршрутизации
Отдельные методы
- Больше маршрутизации
- не DRY
- Простой поиск методов
- Легче читать отдельные методы
Опять же, вопрос в том, какой из этих методов меньше плох.