2012-04-11 6 views
1

Ich verstehe, dass es am besten ist, so viel Code wie möglich in die Modelle zu refaktorieren, aber ich bin relativ neu in Schienen und Programmierung als Ganzes. Eines der Konzepte, das mir Probleme bereitet, ist die Art der Modelle und das Verständnis des Umfangs oder der Verfügbarkeit von Methoden und Variablen.Grundlegende Modelle, Verständnis der Grundlagen von Klassen (Ruby on Rails)

Zunächst einmal mit einer typischen Methode im Modell geschrieben, was sind die Einschränkungen (Bereich), dass Ihre Methode aufgerufen werden kann? Wie funktioniert der .self Aspekt? Welche Controller/Ansichten haben Zugriff auf die im Modell definierten Methoden?

Ich verstehe, dass dies eher Grundprinzipien sind, aber ich glaube, dass meine "Annahmen" in Bezug auf diese mich alle Arten von Problemen verursachen.

+0

„alle Arten von Problemen“ - einige von ihnen aufzählen, und vielleicht können wir ihnen begegnen . Der allgemeine Kern deines Posts ist so weit, dass du nicht antworten kannst, aber im weitesten Sinne: es gibt keine Einschränkungen ;-) – Pavling

Antwort

1

In Model-View-Controller (MVC):

  • A Modell Ihre Daten enthält, und jede Funktionalität eng an Ihre Daten (Low-Level-Logik)
  • A Controller bezogen hält Ihre Geschäftslogik (High-Level-Anwendungslogik)
  • A Ansicht hält Ihre Präsentationsebene (Benutzeroberfläche)

Ansichten haben Zugriff auf alle öffentlichen Modellmethoden. (Hinweis: Alle Ruby-Methoden sind standardmäßig öffentlich.) Natürlich muss das Modellobjekt zuerst in der entsprechenden Controller-Methode instanziiert werden und Instanzvariablen (d. H. @person) und keine lokalen Variablen (d. H.) im Controller sein.

Controller haben auch Zugriff auf alle öffentlichen Modellmethoden.

Geschützte Methoden beschränken den Zugriff innerhalb der Klasse oder innerhalb eines ihrer untergeordneten Elemente. Private Methoden beschränken den Zugriff nur innerhalb der Klasse.

Es scheint mir, dass Klassenmethoden, d. H. def Person.some_method ..., überall sichtbar sind, ob sie als öffentlich, geschützt oder privat definiert sind, obwohl dies kontraintuitiv ist.


In Bezug auf Ihre Frage über sich selbst ... Sie können für alle Anrufe aus dem Inneren dieses Modells auf die eigenen Methoden des Modells selbst verwenden, und Sie werden nicht schief gehen.

z.B. für Person-Modell mit first_name und last_name Spalten:

class Person < ActiveRecord::Base 
    def full_name 
    "#{self.first_name} #{self.last_name}" 
    end 

    def parse_name full 
    self.first_name, self.last_name = full.split 
    end 
end 

Aber das ist Overkill. Sie brauchen eigentlich nicht selbst zu verwenden, um Attribute in Active, nur für die Einstellung Attribute abrufen, so dass die folgende ist in Ordnung:

class Person < ActiveRecord::Base 
    def full_name 
    "#{first_name} #{last_name}" 
    end 

    def parse_name full 
    self.first_name, self.last_name = full.split 
    end 
end 
+0

Danke, das war großartig, so selbst. ist nur erforderlich, wenn ich das Attribut in der db ändern möchte, nicht wenn ich es einfach lesen möchte. – RMcNairn

+0

Genau. Bitte! –

1

Kurz gesagt, gibt es keine wirkliche Einschränkung für den Zugriff auf das Modell. Technisch können Sie Methoden von Ihren Modellen in Ihren Ansichten und Ihren Controllern oder anderen Modellen aufrufen.

Hier ist, wie ich es sehe:

Modelle = Ihre Anwendungslogik
Ansichten = Front-end für Ihre Modelle, in den Stücken zu binden, die der Benutzer (oder eine Dienstleistung) wollen
Controller sehen = Kleben für Ansichten und Modelle, ruft Modelldaten auf und übergibt sie an die Ansicht

Sie sollten Ihre Modelle nicht direkt aus Ihrer Sicht aufrufen. Wenn Sie mehr als 1 oder 2 Operationen an einem Objekt in Ihrem Controller durchführen, sollten Sie es wahrscheinlich in eine Modellmethode verschieben.

Von hier aus würde ich Ihnen empfehlen, ein Buch aufzuheben, um zu erfahren, welche Klassen, Instanzmethoden, Klassenmethoden usw. verwenden. Ich empfehle "Learn to Program" von Pragmatic Programmers.

Von dort erfahren Sie, was MVC ist (viele Informationen da draußen), die mit wie Sie verstehen, Modelle, Ansichten, Controller und wie sie sich beziehen.

+0

Danke, danke, ich werde es mir unbedingt ansehen! – RMcNairn

1

Basierend auf Ihren Fragen scheint es, dass Sie auf objektorientierte Programmierung und das MVC-Muster lesen müssen. Diese sind natürlich nicht exklusiv für Rails.