Se ho un metodo in un controller diverso da quello in cui sto scrivendo, e voglio chiamare quel metodo, è possibile, o dovrei considerare di spostare quel metodo in un altro aiutante?Chiamare un metodo da un altro controller
risposta
È possibile creare tecnicamente un'istanza dell'altro controller e chiamare metodi, ma è noioso, soggetto a errori e altamente sconsigliato.
Se questa funzione è comune a entrambi i controller, è probabile che sia disponibile in ApplicationController
o in un altro controller della superclasse della creazione.
class ApplicationController < ActionController::Base
def common_to_all_controllers
# some code
end
end
class SuperController < ApplicationController
def common_to_some_controllers
# some other code
end
end
class MyController < SuperController
# has access to common_to_all_controllers and common_to_some_controllers
end
class MyOtherController < ApplicationController
# has access to common_to_all_controllers only
end
Un altro modo per farlo come jimworm suggerito, è quello di utilizzare un modulo per la funzionalità comune.
# lib/common_stuff.rb
module CommonStuff
def common_thing
# code
end
end
# app/controllers/my_controller.rb
require 'common_stuff'
class MyController < ApplicationController
include CommonStuff
# has access to common_thing
end
O incluso da un 'modulo'. – jimworm
'include GoodSuggestion' Grazie @jimworm – edgerunner
Creazione di un'istanza dell'altro controller ???? Arrrrrrrgggh (infatti). Un'altra opzione, poiché la domanda è così vaga: spostare il codice sui modelli. – nathanvda
Prova e progressivamente si sposta metodi ai modelli, se non si applicano ad un modello poi un aiutante e se ha ancora bisogno di essere accessibile mettere altrove nel ApplicationController
Non sposterei mai il codice da un controller ad un helper, piuttosto un modulo che vive in '/ lib'. Solo il codice di visualizzazione dovrebbe vivere in un helper. – nathanvda
mettere qualcosa in un aiutante è solo di breve durata. arriverete al punto in cui non dovrete mettere una lib/buttare tutto in un modulo non è neanche troppo buono. –
Preferisco usare i moduli sugli helper, perché sono veri OO, posso includerli/estenderli a piacimento. Posso raggruppare cose che hanno un significato reale. Gli aiutanti sono solo secchi. Raccomando di usare solo quelli per i metodi relativi alla vista. Non sei sicuro di cosa intendi con "arriveresti al punto ...". – nathanvda
non lo faccio conoscere i dettagli del tuo problema, ma forse i percorsi potrebbero essere una soluzione nel tuo caso (specialmente se la sua azione RESTful).
Se requisito ha a che fare con alcune operazioni di DB, allora si può scrivere una funzione comune (metodo di classe) all'interno di quel modello. Le funzioni definite all'interno del modello sono accessibili a tutti i controller. Ma questa soluzione si applica a tutti i casi.
- 1. Chiamare un metodo di controller in un altro controller Ember
- 2. Chiama un metodo da un controller all'interno di un altro
- 3. Possiamo chiamare il metodo di un controller da un altro controller in asp.net MVC?
- 4. Come chiamare un metodo da un altro metodo nell'obiettivo C?
- 5. Come chiamare un puntatore al metodo da un altro metodo
- 6. Spring MVC, chiamare un altro controller dall'interno di un controller
- 7. Chiamare il metodo di controllo AngularJs da un altro servizio
- 8. Come chiamare una funzione da un altro controller in angularjs?
- 9. Chiamare IBAction da un altro metodo senza parametro
- 10. Chiamare il metodo Delphi da un altro programma Delphi
- 11. Chiamare un comando da un altro
- 12. Chiamare un DAO da un altro DAO?
- 13. Come chiamare un altro post su un altro controller nel test funzionale di Rails
- 14. Reindirizzamento da un metodo di controller a un altro metodo di controllo
- 15. Chiama un metodo membro non statico da un altro metodo
- 16. Node JS - Chiamare un metodo da un altro metodo nello stesso file
- 17. metodi statici Python - come chiamare un metodo da un altro metodo
- 18. In javascript, come posso chiamare un metodo di classe da un altro metodo nella stessa classe?
- 19. Chiamare un metodo da un altro metodo nella stessa classe in C++
- 20. chiamare un metodo da un altro metodo nella stessa classe PHP
- 21. Chiamare un metodo frammento da un adattatore
- 22. Chiamare un metodo da un modello Go
- 23. Chiamare un metodo sovrascritto da un costruttore
- 24. Chiamare un metodo in una classe in ogni altro metodo
- 25. Come chiamare un metodo Objective-C da un metodo C?
- 26. Chiamare un metodo di modello in un controller
- 27. Chiamare TagHelpers da un altro TagHelper?
- 28. Metodo di chiamata da un altro ViewController
- 29. Reindirizza un controller a un altro controller
- 30. Si può chiamare un metodo da un altro modello in un modello in Code Igniter?
È possibile aggiungere fatti al problema che si desidera risolvere chiamando il metodo di un altro controller? Attualmente è piuttosto vago e la soluzione dipenderà dal problema. – mliebelt
Infatti, per favore, elabora quello che stai cercando di risolvere. cosa sta facendo il metodo condiviso? – nathanvda