Rails 3: вызов функций внутри контроллеров - PullRequest
10 голосов
/ 05 января 2011

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

Ответы [ 4 ]

14 голосов
/ 05 января 2011

если вы хотите, чтобы он был локальным по отношению к контроллеру, тогда все, что вам нужно сделать, это добавить его в контроллер, который вы хотите использовать.

private
def myfunction
  function code.....
end

для всех контроллеров вы можете поместить его в контроллер приложения, потому что все контроллеры подклассифицированы.

ApplicationController

protected

def myfunction

  function code.....

end

Если вам нужен доступ в ваших представлениях, вы можете создать помощника

ApplicationHelper

def myfunction

  function code...

end
4 голосов
/ 05 января 2011

@ jonnii, например, я хочу вызвать функцию, которая возвращает сгенерированный уникальный код.

Если ваш сгенерированный код будет использоваться только на ваших контроллерах , поместите функцию в контроллер как защищенную функцию (самый простой способ - поместить ее в ApplicationController).

Если вам нужно вызвать функцию в представлениях , тогда положите ее на помощника, как говорит Ддаян.

Если вам также нужно вызвать функцию из моделей , то самый простой способ сделать это - поместить модуль в каталог / 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 голосов
/ 05 января 2011
class YourController < ActionController::Base

  def your_action
    your_function
  end

  private

    def your_function

    end
end

Также посмотрите на before_filter и after_filter, они часто полезны в таких вещах

0 голосов
/ 05 января 2011

ApplicationController здесь для этого, так как каждый контроллер унаследован от него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...