重用网站中其他各个地方的控制器操作

时间:2011-11-17 07:31:48

标签: ruby-on-rails

开发网站时的常见情况是有一个列出并创建多个不同资源的索引操作。

例如,假设您有交易控制器,在同一页面上列出付款和费用(费用是自动计算的付款组)。

在交易索引操作上,有两种形式:一种用于创建新费用,另一种用于创建新支付。这两种形式都指向各自的控制器提交动作。如果数据无效,它应该重定向回事务#index并显示错误消息。

这只是一般性的讨论,它与具体问题无关,所以我们假设以下内容:

  • 不会使用AJAX
  • 我们无法将费用和付款概括为共享基础

问题在于,虽然我们可以将数据提交给不同的控制器,但我们无法从中获得响应。我们可以重定向,但之后我们将丢失数据和验证错误。有一些'hackish'解决方案,但我想保持这个简单。

解决此问题的一种方法是在事务控制器上实现特定操作(如create_expense和create_payment)。它会工作,但它会导致代码重复和破坏REST,我不喜欢它。

真正的问题是:我们如何重新使用网站中其他各个地方的控制器操作,让它感觉像是一个自然过程?

1 个答案:

答案 0 :(得分:1)

您可以在表单中添加hidden_field :redirect_back_to => transactions_path,然后将表单发布到各自的控制器,并让控制器重定向回params[:redirect_back_to](如果存在)。

这看起来有点像hacky,但我认为如果您不想使用AJAX,这是最简单的解决方案。