如果我想在控制器内部调用函数,我应该把它们放在哪里?
答案 0 :(得分:14)
如果您希望它是控制器的本地控制器,那么您需要做的就是将它添加到您想要使用的控制器中。
private
def myfunction
function code.....
end
所有控制器都可以将它放在应用程序控制器中,因为所有控制器都属于子类。
protected
def myfunction
function code.....
end
如果您想在视图中访问,那么您可以创建帮助
def myfunction
function code...
end
答案 1 :(得分:4)
@jonnii,例如,我想调用一个返回生成的唯一代码的函数。
如果您生成的代码仅用于控制器,请将该函数作为受保护函数放入控制器中(最简单的方法是将其放在ApplicationController中)。
如果您需要在视图上调用该函数,请将其放在助手上,就像ddayan所说。
如果您还需要从 models 调用该函数,那么最简单的方法是将一个模块放在/ lib /目录中。
# /lib/my_module.rb
module MyModule
def generate_code
1
end
end
您还需要在初始化程序中包含它:
#/config/initializers/my_module.rb
require 'my_module'
从那一刻开始,你可以使用这样的功能:
MyModule::generate_code
如果您经常这样做,请考虑创建一个gem。
答案 2 :(得分:3)
class YourController < ActionController::Base
def your_action
your_function
end
private
def your_function
end
end
同时查看before_filter
和after_filter
,它们在这类事情中经常有用
答案 3 :(得分:0)
ApplicationController就在这里,因为每个Controller都从它继承。