Если я хочу, чтобы функции вызывались внутри контроллеров, куда их следует поместить?
Rails 3: функции вызова внутри контроллеров
Ответ 1
если вы хотите, чтобы он был локальным для контроллера, все, что вам нужно сделать, это добавить его к контроллеру, который вы хотите использовать.
private
def myfunction
function code.....
end
всем контроллерам, которые вы можете поместить в контроллер приложения, потому что все контроллеры подклассы.
ApplicationController
protected
def myfunction
function code.....
end
Если вам нужен доступ в ваших представлениях, вы можете создать вспомогательный
ApplicationHelper
def myfunction
function code...
end
Ответ 2
@jonnii, например, я хочу вызвать функцию, которая возвращает сгенерированный уникальный код.
Если ваш сгенерированный код будет использоваться только на ваших контроллерах, поместите функцию внутри контроллера в качестве защищенной функции (самый простой способ - разместить ее внутри ApplicationController).
Если вам нужно вызвать функцию на представлениях, то поставьте ее на помощника, как говорит ddayan.
Если вам также нужно вызвать функцию из моделей, то самый простой способ сделать это - поместить модуль в каталог /lib/.
# /lib/my_module.rb
module MyModule
def generate_code
1
end
end
Вам также потребуется включить его с инициализатором:
#/config/initializers/my_module.rb
require 'my_module'
С этого момента вы можете использовать следующую функцию:
MyModule::generate_code
Если вы делаете это очень часто, подумайте о создании драгоценного камня.
Ответ 3
class YourController < ActionController::Base
def your_action
your_function
end
private
def your_function
end
end
Также смотрите before_filter
и after_filter
, они часто полезны в таких вещах
Ответ 4
ApplicationController здесь для этого, поскольку каждый Контроллер унаследован от него.