从另一个控制器调用方法

时间:2011-11-22 10:45:23

标签: ruby-on-rails

如果我在一个不同的控制器中有一个方法,我正在编写的那个,我想调用那个方法,是否可能,或者我应该考虑将该方法转移给帮助者?

4 个答案:

答案 0 :(得分:49)

你可以在技术上创建另一个控制器的实例并在其上调用方法,但它很繁琐,容易出错,而且不推荐使用。

如果该功能对两个控制器都是通用的,那么你应该在ApplicationController或你创建的另一个超类控制器中使用它。

class ApplicationController < ActionController::Base
  def common_to_all_controllers
    # some code
  end
end

class SuperController < ApplicationController
  def common_to_some_controllers
    # some other code
  end
end

class MyController < SuperController
  # has access to common_to_all_controllers and common_to_some_controllers
end

class MyOtherController < ApplicationController
  # has access to common_to_all_controllers only
end

建议使用jimworm建议的另一种方法是使用模块来实现常用功能。

# lib/common_stuff.rb
module CommonStuff
  def common_thing
    # code
  end
end

# app/controllers/my_controller.rb
require 'common_stuff'
class MyController < ApplicationController
  include CommonStuff
  # has access to common_thing
end

答案 1 :(得分:3)

尝试并逐步将方法移动到模型中,如果它们不适用于模型然后是帮助程序,并且如果它仍然需要在其他地方访问,请放入ApplicationController

答案 2 :(得分:0)

我不知道你的问题的任何细节,但也许路径可以解决你的情况(特别是如果它的RESTful行动)。

http://guides.rubyonrails.org/routing.html#path-and-url-helpers

答案 3 :(得分:0)

如果您需要执行某些数据库操作,那么您可以在该模型中编写一个公共函数(类方法)。模型内定义的函数可以访问所有控制器。但是这个解决方案适用于所有情况。