Se si desidera che le funzioni vengano chiamate all'interno dei controller, dove dovrei inserirle?Rails 3: Funzioni di chiamata all'interno dei controller
risposta
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
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
L'ApplicationController è qui per questo, dal momento che ogni controller ereditato da esso.
@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.
Si prega di dare maggiori informazioni, vuoi che sia disponibile per tutti i controller? – ddayan
Che tipo di funzioni? – jonnii
@ddayan, sì a tutti i controller ma sarei felice di sapere come limitare a un controller. – donald