Ich muss eine Aktion innerhalb eines Controllers von einer Methode innerhalb eines Modells aufrufen. Das ist etwas, das ich viel in einer anderen Sprache mache (wenn ich mit dem MVC-Framework arbeite), aber das habe ich noch nie in Ruby on Rails gesehen. Die Aktion zeigt nichts an, sie aktualisiert lediglich eine Sitzungsvariable.Rails Model zum Aufrufen Controller-Aktion
Antwort
Das ist nicht wirklich etwas, was Sie normalerweise im MVC-Muster tun würden. Ihr Modell sollte eigentlich nur Geschäftslogik (und Datenzugriff) enthalten. Können Sie einige Informationen dazu liefern, was Sie anrufen möchten und warum? Normalerweise, wenn Sie versuchen, etwas wie das zu tun, ist es ein Geruch, dass etwas nicht dort ist, wo es sein sollte. Diese
ist in der Regel so, wie ich es sehe:
- Modell - das sind Datenobjekte, die haben auch Methoden für die Geschäftslogik
- -Controller - das sind die Aktionen durch Ihre Anwendung genommen, sie kontrollieren die Modelle und ihnen sagen, was zu tun ist sie die Ansicht steuern, es zu sagen, was zu
- Ansicht emittieren - das ist die Grenzschicht, es in einem beliebigen Format (html, js,sein könntexml), aber es hat sehr wenig Logik es
Wenn Sie versuchen, etwas in einer Steuerung von einem Modell zu nennen, könnte es zu bedeuten, dass es zu viel ist in Ihrem Modell zu steuern Logik.
Oder vielleicht haben Sie gerade eine Methode, die überall verwendet werden könnte (es ist eine Hilfsmethode, und es ist eigentlich unabhängig von dem Modell und Ihrem Controller). In diesem Fall sollten Sie es in ein eigenes Modul im Verzeichnis/lib einfügen.
Edit: Yeah, Sitzungsvariablen sollten wahrscheinlich nur im Controller berührt/aktualisiert werden. Vielleicht haben Sie zu viel Steuerlogik in Ihrem Modell? Vielleicht überdenken Sie, wie eng diese Logik mit dem tatsächlichen Modell zusammenhängt, wenn es tatsächlich Teil der Aktion des Controllers ist.
Wenn Sie Controller-Aktion aufrufen (oder cahange Sitzung, da session
als @session
Variable definiert ist, und es ist privat) vom Modell sollten Sie Controller-Instanz als param Modell-Methode übergeben, so, wenn Sie bearbeiten session
Methode brauchen kann ähnlich sein
def change_session(controller)
@ses = controller.send :session
//some actions
end
in Controller
def something
s = Session.new
s.change_session(self)
...
end
- 1. Rails Model Association Verwirrung
- 2. Benchmarking Rails Model Methoden
- 3. Fields_for Nested Model Rails 3.2.2
- 4. Dynamische Schemen in Rails Model
- 5. Anhalten innerhalb einer MVC-Controlleraktion
- 6. Rails - Erstellen von Parent & Nested Model Records?
- 7. Rails NameError nicht initialisierte Konstante (Model und Namespace Collision)
- 8. Ruby on Rails: Calling Model Methode in Sicht
- 9. Umgestalten Rails 3 Ansichten - move Logik <model> _helper
- 10. Rails - Aufrufen einer Helpermodulmethode innerhalb einer Klasseninstanzmethode
- 11. Rails betreffen, wie ClassMethods von InstanceMethod aufrufen
- 12. @Model vs Model in einer Ansichtsdatei
- 13. omniauth model generation frozen
- 14. Übergeben von zusätzlichen Parametern an Rails Generate Model?
- 15. Testen von Model Interactor - Update-Attribut RAILS RSpec
- 16. Model based Löschen von CouchDB Daten in Rails
- 17. Ruby on Rails ActiveScaffold: Wird {{Model}} anstelle des Modellnamens angezeigt?
- 18. Problem Caching Model Instanzen auf einer Konstante in Rails
- 19. Rails, die JSON-Daten mit Model Root rendern
- 20. Rails effiziente Möglichkeit, JavaScript-Objekt zu Model zu speichern?
- 21. Stripes MVC Model Data
- 22. CouchDB Document Model Änderungen?
- 23. Eine AJAX-Aktionsverbindung von einer Controlleraktion dynamisch zurückgeben
- 24. Rails allgemeine Methode zum Aktualisieren eines Datenbankfelds
- 25. Call Model from View
- 26. Wie kann ich eine Klasse in Rails dynamisch aufrufen oder aufrufen?
- 27. Mongoose Model in Model ist undefined
- 28. Wie kann ich eine API (zum Beispiel Flickr API) in Ruby on Rails aufrufen? Newbie Frage
- 29. App-Option zum Aufrufen von Protokollen einfügen
- 30. Verwenden von jQuery zum Aufrufen eines Webdiensts
Das Problem ist, dass ich ein Plugin für die Authentifizierung haben und ich brauche eine Methode aufrufen, wenn ein Benutzer über eine Funktion innerhalb des Plugin erinnere mich anmeldet (was für unsere Gelben Seiten bewertet alle Login-Controller-Aktionen - wenn dies nicht der Fall wäre, würde ich die Sitzungsdaten hier natürlich ändern. Die Notwendigkeit, eine Methode im Controller aufzurufen, hängt mit der analytischen Verfolgung zusammen und nicht wirklich mit dem, was der Benutzer sieht. – scott