Gibt es eine Möglichkeit, ein Array zwischen Controller-Methoden zu teilen und zu speichern, bis die Seite neu geladen wird oder die Methode eines anderen Controllers aufgerufen wird? Einige Methoden sollten das Array ändern.Wie Werte zwischen den Controller-Methoden übergeben werden
Antwort
Wenn Sie den Wert über die Methoden einer gleichen Controller-Instanz dann teilen möchten, deklarieren eine Instanzvariable:
class BarsController < UsersController
before_filter :init_foo_list
def method1
render :method2
end
def method2
@foo_list.each do | item|
# do something
end
end
def init_foo_list
@foo_list ||= ['Money', 'Animals', 'Ummagumma']
end
end
Wenn Sie den Wert über zwei Controller withn einer Sitzung zu teilen, dann gilt:
class BarsController < UsersController
before_filter :init_foo_list
def method1
render :controller => "FoosController", :action => "method2"
end
def init_foo_list
params[:shared_param__] ||= ['Money', 'Animals', 'Ummagumma']
end
end
class FoosController < UsersController
def method2
params[:shared_param__].each do | item|
# do something
end
end
end
Geben Sie dem gemeinsamen Parameterschlüssel einen eindeutigen Namen, um eine Kollision mit vorhandenen Schlüsseln zu vermeiden.
Andere Option ist, das freigegebene Array in der Session-Anzeige zu speichern und es vor dem endgültigen Rendern zu löschen.
können Sie Rails-Cache verwenden.
Rails.cache.write("list",[1,2,3])
Rails.cache.read("list")
Ihr Weg scheint zu funktionieren! Ich habe keine guten Dokumente für Rails.cache gefunden. Bitte geben Sie mir einen Link. – Antiarchitect
Aber was passiert, wenn verschiedene Sitzungen unterschiedliche Werte haben? –
Ich zweite Tony. Sofern Sie nicht die Eindeutigkeit des Namens "liste" während der gesamten Sitzung sicherstellen, schlägt diese Lösung während gleichzeitiger Anfragen fehl. –
Ich bin nicht sicher, ob meine Antwort auf Ihre Anforderung nahe ist, aber das ist, was ich tun, wenn ich den Wert eines Objekts/Modell erhalten möchten, die in einer Controller-Aktion und Basis auf diesem Wert abgerufen wird Ich muss andere Werte in einer anderen Controller-Aktion abrufen. Ich verwende Klassenvariablen und verwenden Sie es in meinem Controller-Aktion
für zB:
@pages=Post.find.all`
@@[email protected](any manipulations)
jetzt @@my_vales
kann in allen möglichen Aktionen des Controllers verwendet werden ..
hoffe, es hilft ...
- 1. Werte zwischen UserControls übergeben
- 2. Wie HTTP AUTH-Werte über den Prototyp Ajax.Request() übergeben werden?
- 3. Werte zwischen TestNG-Tests übergeben
- 4. Wie Werte von MapOverlay übergeben werden
- 5. Wie Werte in sqloader übergeben werden - Oracle
- 6. Wie mehrere Werte an den Controller übergeben?
- 7. Wie IntPtr zwischen Prozess/Anwendungen übergeben werden
- 8. Wie Parameter zwischen Kakao-Anwendungen übergeben werden
- 9. Boolesche Werte zwischen Skripten übergeben Unity
- 10. Daten zwischen den Seiten richtig übergeben
- 11. Wie Werte an Vorlagen in Tornado übergeben werden
- 12. Wie Werte dynamisch an Dijktras-Algorithmus übergeben werden
- 13. Übergeben Sie den Textwert zwischen zwei xml
- 14. SQL: in Klausel in gespeicherter Prozedur: wie Werte übergeben werden
- 15. Wie mehrere Werte als einzelner Parameter in ssrs übergeben werden
- 16. Wie mehrere Werte einer Variablen über eine URL übergeben werden
- 17. python 3.2 wie Daten in Variablen zwischen Funktionen übergeben werden
- 18. Wie MediaPlayer-Objekt zwischen verschiedenen Komponenten übergeben werden
- 19. AngularJS: Wie Daten zwischen Service und Fabrik übergeben werden?
- 20. Hot zum Übergeben Werte zwischen Ansichten oder Klassen?
- 21. Werte wahren zwischen den Aktivitäten über Bundle
- 22. Übergeben eines Objekts zwischen den Zuständen
- 23. phpunit: Wie gebe ich Werte zwischen den Tests?
- 24. Wie Daten zwischen UIViewControllern mit Protokollen/Delegaten übergeben werden
- 25. Wie Daten zwischen Seiten in Ionic App übergeben werden
- 26. wie Interger zwischen View-Controllern in Swift übergeben werden
- 27. Wie können Werte zwischen zwei View Controller-Instanzen geteilt werden?
- 28. Wie Werte zwischen Klassen auf dem iPhone übertragen werden?
- 29. Daten zwischen Controllern übergeben
- 30. ANDROID OverlayItem - Werte übergeben
attr_accessor bedeutet, dass ich auf diese Variable in der gesamten Klasseninstanz zugreifen kann. Hmm .. Ich werde es versuchen! Vielen Dank! – Antiarchitect
Der erste Weg funktioniert nicht. foo_list ist null in method2 Aber die erste Methode wird vor der zweiten aufgerufen. Und wie kann ich foo_list nicht in Methoden definieren sondern initialisieren? def initialisieren self.foo_list = ['Geld', 'Tiere', 'Ummagumma'] Ende Auf diese Weise oder irgendwie anders? – Antiarchitect
Stellen Sie den Wert in einem 'before_filter' ein –