如果我在一个不同的控制器中有一个方法,我正在编写的那个,我想调用那个方法,是否可能,或者我应该考虑将该方法转移给帮助者?
答案 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)
如果您需要执行某些数据库操作,那么您可以在该模型中编写一个公共函数(类方法)。模型内定义的函数可以访问所有控制器。但是这个解决方案适用于所有情况。