2011-01-05 10 views
10

コントローラ内で呼び出す関数を用意したい場合、どこに配置すればよいですか?Rails 3:コントローラ内の関数を呼び出す

+0

詳細をお知らせください。すべてのコントローラで使用できるようにしますか? – ddayan

+0

どのような機能ですか? – jonnii

+0

@ddayan、すべてのコントローラにはいですが、コントローラを1つに制限する方法を知ってうれしいです。 – donald

答えて

14

コントローラーのローカルにしたい場合は、使用するコントローラーにコントローラーを追加するだけです。

すべてのコントローラには、すべてのコントローラがサブクラス化されているため、アプリケーションコントローラ内に配置することができます。

ApplicationControllerに

protected 

def myfunction 

    function code..... 

end 

あなたのビューでアクセスしたい場合、あなたは、ヘルパー

ApplicationHelper

def myfunction 

    function code... 

end 
+2

私は、 'ApplicationController'の例はプライベートではなく、保護されるべきだと考えています。 – jrdioko

+0

最初の例からコピー&ペーストしたときに変更するのを忘れました。それを見つけてくれてありがとう。 – ddayan

+0

本当に便利なのは... – useranon

3
class YourController < ActionController::Base 

    def your_action 
    your_function 
    end 

    private 

    def your_function 

    end 
end 

はまたbefore_filterを見て、after_filter、彼らは物事のような種類に便利だ

0

ApplicationControllerには、すべてのコントローラーはそれから継承するので、そのためにここにあります。

4

@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 

非常に頻繁に、宝石を作ることを検討してください。

関連する問題