2011-01-05 14 views
10

Se si desidera che le funzioni vengano chiamate all'interno dei controller, dove dovrei inserirle?Rails 3: Funzioni di chiamata all'interno dei controller

+0

Si prega di dare maggiori informazioni, vuoi che sia disponibile per tutti i controller? – ddayan

+0

Che tipo di funzioni? – jonnii

+0

@ddayan, sì a tutti i controller ma sarei felice di sapere come limitare a un controller. – donald

risposta

14

se si desidera che sia locale per un controller, tutto ciò che è necessario fare è aggiungerlo al controller che si desidera utilizzare.

private 
def myfunction 
    function code..... 
end 

a tutti i controller è possibile inserirli nel controller dell'applicazione, poiché tutti i controllori sono sottoclassificati.

ApplicationController

protected 

def myfunction 

    function code..... 

end 

se si vuole accedere a vostro punto di vista quindi è possibile creare un aiutante

ApplicationHelper

def myfunction 

    function code... 

end 
+2

Credo che l'esempio 'ApplicationController' dovrebbe essere protetto, non privato. – jrdioko

+0

vero. Hai dimenticato di cambiarlo quando lo copio e lo incollo dal primo esempio. grazie per averlo scoperto. – ddayan

+0

davvero utile uno ... – useranon

3
class YourController < ActionController::Base 

    def your_action 
    your_function 
    end 

    private 

    def your_function 

    end 
end 

un'occhiata anche a before_filter e after_filter, sono spesso utili in questo tipo di cose

0

L'ApplicationController è qui per questo, dal momento che ogni controller ereditato da esso.

4

@jonnii, per esempio, voglio chiamare un funzione che restituisce un codice univoco generato.

Se il codice generato sta per essere utilizzato solo sulle tue controller, mettere la funzione all'interno di un controllore, come funzione protetta (il modo più semplice sarebbe stata messa dentro ApplicationController).

Se è necessario chiamare la funzione su visualizzazioni, quindi metterlo su un helper, come dice Ddayan.

Se è anche necessario richiamare la funzione dai modelli , il modo più semplice per farlo è inserendo un modulo nella directory/lib /.

# /lib/my_module.rb 
module MyModule 
    def generate_code 
    1 
    end 
end 

Sarà inoltre necessario includere con un inizializzatore:

#/config/initializers/my_module.rb 
require 'my_module' 

Da quel momento in poi, è possibile utilizzare la funzione in questo modo:

MyModule::generate_code 

Se si sta facendo questo molto spesso, considera la possibilità di creare una gemma.