Как мне обработать запуск «метода действия» через RESTful Controller? - PullRequest
0 голосов
/ 23 июля 2011

Я стараюсь, чтобы мои контроллеры были хорошими. Одна вещь, с которой я постоянно сталкиваюсь, - это необходимость кнопки или ссылки на сайте, чтобы вызвать определенное событие в модели. Например:

@user.ban!

В настоящее время я создаю пользовательский маршрут на пользовательском контроллере или, если это более сложный набор связанных действий, я создаю новый контроллер, который действует на той же модели, что и другой контроллер с «традиционным именем».

Каков наилучший подход в такой ситуации? Какие факторы влияют на решение?

Ответы [ 2 ]

1 голос
/ 23 июля 2011

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

resources :users

Лучший способ добавить в него маршрут restfull - это определить метод запрета в контроллере пользователей и добавить участника.маршрут к маршруту пользователя, чтобы ваш маршрут в конечном итоге выглядел следующим образом

resources :users do
   member do
     post :ban, :pay, :whatever
   end
end

Используйте маршрут memeber для действий после размещения формы, т. е. при использовании помощников вида button_to или form_for (плюс другие).Использовать коллекции для запросов на получение (т. Е. Ссылки)

В качестве альтернативы вы можете использовать <% = button_to 'Ban', @user%>, а затем в действии обновления для контроллера пользователей проверить параметры фиксации для запрета текста и действоватьСоответственно, на самом деле я иногда использую это, например, так:

   if params[:commit] == 'Ban'
#    do something like calling a ban method setting a flash notice or alert and redirecting
   else
     normal controller flow
   end

Еще лучше.Используйте i18n, чтобы отобразить текст на кнопке, и сравните то же значение i18n с параметром фиксации, тем самым предоставив вам возможность изменить текст на кнопке, обновив файл y18n i18n, не нарушая код контроллера

0 голосов
/ 23 июля 2011

Прежде всего, то, что говорит Джеймс, это хорошо. Здесь много деталей ...

http://guides.rubyonrails.org/routing.html#non-resourceful-routes http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

... и я на самом деле схожу с этим по любым нетрадиционным маршрутам, которые мне нужны. О «факторах, которые влияют на это решение», хотя ... Сначала я хотел бы спросить себя, является ли это эксцентричное действие абсолютно необходимым, потому что чаще всего в политику Rails входит «соглашение о конфигурации». Из опыта я нахожу, что мне довольно редко нужны нетипичные действия. Полагаю, если вы сможете это оправдать, не чувствуйте себя виноватым и продолжайте.

Мне редко когда-либо приходилось делать целый «другой контроллер».

...