Подтвердить что ты не робот

Rails 3: функции вызова внутри контроллеров

Если я хочу, чтобы функции вызывались внутри контроллеров, куда их следует поместить?

4b9b3361

Ответ 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 здесь для этого, поскольку каждый Контроллер унаследован от него.