Rails 3:调用控制器内部的函数

时间:2011-01-05 15:30:34

标签: ruby-on-rails ruby ruby-on-rails-3

如果我想在控制器内部调用函数,我应该把它们放在哪里?

4 个答案:

答案 0 :(得分:14)

如果您希望它是控制器的本地控制器,那么您需要做的就是将它添加到您想要使用的控制器中。

private
def myfunction
  function code.....
end

所有控制器都可以将它放在应用程序控制器中,因为所有控制器都属于子类。

的ApplicationController

protected

def myfunction

  function code.....

end

如果您想在视图中访问,那么您可以创建帮助

ApplicationHelper

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_filterafter_filter,它们在这类事情中经常有用

答案 3 :(得分:0)

ApplicationController就在这里,因为每个Controller都从它继承。