如何使用来自另一个控制器的参数创建控制器实例?

时间:2018-04-12 11:26:38

标签: ruby-on-rails controller

我需要从另一个controller创建controller实例以使用其方法。当我创建

c = SomeController.new
c.some_method

some_method使用params[],然后我遇到错误NoMethodError: undefined method 'parameters' for nil:NilClass。 如何将参数传递给controller

2 个答案:

答案 0 :(得分:1)

你要做的事情不推荐任何框架。您可能在多个控制器中有一些您想要的代码。要实现所需的行为,请将公共代码提取到库中,然后可以在任何所需的控制器中调用该代码。

答案 1 :(得分:0)

您没有在Rails中实例化控制器 - 它在路由器匹配路由请求时由路由器完成。

它刚刚没有完成,因为它违反了Rails中MVC的工作方式 - 一个请求=一个控制器。您还需要将整个env哈希从机架传递到控制器,以使其正常工作。

但是真的 - 不要。有更好的方法。

如果需要在控制器之间共享方法,可以采用更好的方法,例如使用继承:

class ApplicationController
  def some_method
  end
end

class FooController < ApplicationController

end

class BarController < ApplicationController

end

或者mixins:

# app/controllers/concerns/foo.rb
module Foo
  def some_method
  end
end

class BarController < ApplicationController
  include Foo
end

class BazController < ApplicationController
  include Foo
end

如果您需要将请求从一个控制器操作移动到另一个控制器操作,则应该重定向用户。