ruby-on-rails – 在没有HTTP重定向的情况下,从另一个控制器操作运行一个控制器操作的正确方法是什么?

我希望能够基于查询参数和数据库中的数据的组合,从一个控制器动作有条件地发送到另一个控制器动作.

我现在拥有的是:

class OldController < ApplicationController
  def old_controller_action
    if should_use_new_controller
      new_params = params.dup
      new_params[:controller] = "new_controller_action"
      redirect_to new_params
      return
    end
    # rest of old and busted
  end
end

class NewController < ApplicationController
  def new_controller_action
    # new hotness
  end
end

这很好用,但它会发出HTTP重定向,这很慢.我希望能够做同样的事情,但在同一个HTTP请求中.

有干净的方法吗?

编辑:赏金将转到可以向我展示干净方式的人,使控制器及其操作相对不受影响(除了重定向代码本身).

最佳答案
而不是跨操作调用代码,将代码提取到lib /或其他东西,并从两个控制器调用该代码.

# lib/foo.rb
module Foo
  def self.bar
  # ...
  end
end

# posts_controller
def index
  Foo.bar
end

# things_controller
def index
  Foo.bar
end

转载注明原文:ruby-on-rails – 在没有HTTP重定向的情况下,从另一个控制器操作运行一个控制器操作的正确方法是什么? - 代码日志