повторное использование действий контроллера из других мест на сайте - PullRequest
1 голос
/ 17 ноября 2011

Обычная ситуация при разработке веб-сайта - наличие одного действия индекса, которое перечисляет и создает несколько разных ресурсов.

Например, предположим, что у вас есть контроллер транзакций, который перечисляет как платежи, так и расходы на одной странице (где расходы - это автоматически рассчитанная группа платежей).

Для действия с индексом транзакций существует две формы: одна для создания нового расхода, а другая для создания нового платежа. Обе эти формы указывают на подчинение их соответствующим контроллерам создания действий. Если данные недействительны, они должны перенаправить обратно на транзакции # index и отобразить сообщения об ошибках.

Это всего лишь общее обсуждение, оно не связано с конкретной проблемой, поэтому предположим следующее:

  • AJAX не будет использоваться
  • Мы не можем обобщать расходы и платежи в общую базу

Проблема в том, что, хотя мы можем передавать данные на другой контроллер, мы не можем получить от них ответ. Мы можем перенаправить обратно, но тогда мы потеряем наши данные и ошибки проверки. Для этого есть несколько «хакерских» решений, но я бы хотел сохранить это простым.

Одним из способов решения этой проблемы было бы выполнение определенных действий на контроллере транзакций (например, create_expense и create_payment). Это будет работать, но это приведет к дублированию кода и нарушению REST, и мне это не нравится.

Реальный вопрос заключается в следующем: как мы можем повторно использовать действия контроллера из других мест на веб-сайте и заставить его чувствовать себя как естественный процесс?

1 Ответ

1 голос
/ 17 ноября 2011

Вы можете включить hidden_field :redirect_back_to => transactions_path в свои формы, а затем просто отправить формы на соответствующие контроллеры и позволить контроллерам перенаправить обратно на params[:redirect_back_to], если он присутствует.

Это может показаться немногохак, но я думаю, что это самое простое решение, если вы не хотите использовать AJAX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...