我希望能够基于查询参数和数据库中的数据的组合,从一个控制器动作有条件地发送到另一个控制器动作.
我现在拥有的是:
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
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但它会发出HTTP重定向,这很慢.我希望能够做同样的事情,但在同一个HTTP请求中.
有干净的方法吗?
编辑:赏金将转到可以向我展示干净方式的人,使控制器及其操作相对不受影响(除了重定向代码本身).
Aug*_*aas 13
而不是跨操作调用代码,将代码提取到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
Run Code Online (Sandbox Code Playgroud)
小智 9
创建控制器类的实例:
@my_other_controller = MyOtherController.new
Run Code Online (Sandbox Code Playgroud)
然后调用它上面的方法:
@my_other_controller.some_method(params[:id])
Run Code Online (Sandbox Code Playgroud)
我更喜欢模块的想法,但这应该可以解决问题.
| 归档时间: |
|
| 查看次数: |
12981 次 |
| 最近记录: |