J'ai du mal à comprendre l'orje dans Ruby sur des rails. De ce que je comprends, il y a une relation 1: 1 entre les tables / colonnes et les objets / attributs. Donc, chaque enregistrement est un objet. Aussi ce qui est exactement un modèle? Je sais qu'il mappe sur une table. P>
Ce que je suis vraiment après est une compréhension plus profonde de ce qui précède. Merci d'avance pour votre aide p>
Je suis un développeur Web qui va de PHP à Ruby sur des rails. P>
7 Réponses :
1: 1 n'est pas tout à fait correct, car il y a INSPACE DE CONDITION DE L'OBJECTIVE MisMatch A >. P>
Le Définition de Wikipedia: P>
Cartographie relative à l'objet (ORM, O / RM, et mappage O / R) dans un logiciel informatique est une technique de programmation pour Conversion des données entre incompatibles Systèmes de type dans des bases de données relationnelles et programmation orientée objet Langues. Cela crée, en vigueur, un "Base de données d'objet virtuel" qui peut être utilisé depuis la programmation Langue. p> blockQuote>
d'une vue PHP, il sera de la manière suivante (par exemple) p>
- Connectez-vous à la base de données et obtenez une ligne de la table des messages. Li>
- Tournez cette ligne à un objet avec des attributs comme ceux des colonnes de table. Li>
- Si les messages ont des commentaires dans les commentaires Tableau, vous pouvez également faire des fichiers post.com et vous obtenez également les commentaires comme un éventail d'objets également. LI> ol>
Vous pouvez définir des relations entre les tables telles que dire: Posts Has_many Commentaires, un commentaire appartient à un post et ainsi. p>
Si fondamentalement, vous ne travaillez pas avec des lignes de base de données, vous transformez ces lignes et leurs relations avec des objets avec des relations de composition ou de héritage. P>
Il y a deux pièces ici: le motif MVC de ORM et rails. Orm est court pour "cartographie relationnelle", et il fait à peu près ce qu'il est dit: il mesure que les tables de votre base de données sont des objets avec lesquels vous pouvez travailler. P>
MVC est court pour "contrôleur de vue de modèle", le motif qui décrit la manière dont les rails allument le comportement de votre domaine et les représentations d'objet dans des pages utiles. Le modèle MVC tombe en trois morceaux: P>
modèles forts> contient une définition de quel objet dans votre domaine représente et comment elle est liée à d'autres modèles. Il décrit également la manière dont les champs et les relations représentées dans la carte d'objet pour soutenir les magasins (tels qu'une base de données). Notez que, en soi, il n'y a rien à propos d'un modèle qui prescrit que vous devez utiliser un orje particulier (ou même un ormes du tout). P> li>
contrôleurs forts> Spécifiez comment les modèles doivent interagir les uns avec les autres pour produire des résultats utiles en réponse à une demande de l'utilisateur. P> LI>
orm in rails est une implémentation du enregistrement actif strong> modèle De Martin Fowler's schémas d'architecture d'applications d'entreprise em> livre. En conséquence, le cadre Orm Rails est nommé Activerecord. P>
L'idée de base est qu'une table de base de données est enveloppée dans une classe et une instance d'un objet correspond à une seule ligne de cette table. La création d'une nouvelle instance ajoute donc une ligne à la table, la mise à jour de l'objet met à jour la ligne, etc. La classe wrapper implémente les propriétés de chaque colonne de la table. Dans ActionCord, ces propriétés sont disponibles automatiquement à l'aide de la métaprogramming Ruby sur la base du schéma de base de données. Vous pouvez remplacer ces propriétés si nécessaire si vous devez introduire une logique supplémentaire. Vous pouvez également ajouter des "em> les attributs virtuels em>, qui n'ont pas de colonne correspondante dans la table de base de données sous-jacente. P>
rails est un Modèle-View- Contrôleur strong> (MVC), donc un modèle de rails est le M fort> en MVC. En plus d'être la classe Wrapper Activerecord décrite ci-dessus, il contient une logique commerciale, y compris la logique de validation implémentée par le module de validation de ActionCord. P>
lecture supplémentaire h3>
en termes de layman. p>
ci-dessus est en fait les rails activeCord orm. P>
Un modèle n'est pas nécessairement une table dans la base de données. Seuls les modèles basés sur Aciverecord sont.
Oui bien sûr. La plupart du temps, un modèle Rails est un modèle basé sur Activerecord. Il existe en effet des modèles non actifs-record-enregistrés également dans des rails. Voir: railscasts.com/episodes/121-non-active-record-model < / a>
"De ce que je comprends, il existe une relation 1: 1 entre les tables / colonnes et les objets / attributs. Donc, chaque enregistrement est un objet." P>
Ce n'est pas exactement correct, sauf si vous utilisez le terme "objet" très vaguement. Les tables sont modélisées par classes em>, tandis que la table enregistrements em> sont modélisées par instances de ces classes em>. P>
Disons que vous ayez un "Aussi quel est exactement un modèle? Je sais qu'il est mappée sur une table" p>
Les modèles ne sont que des classes avec lots em> de méthodes très utiles pour manipuler votre base de données. Voici quelques exemples: p>
Ce ne sont que quelques exemples. Enregistrement actif fournit beaucoup plus de fonctionnalités telles que les traductions, la portée des requêtes ou le support d'héritage de table unique. P>
Dernier point mais non le moindre, vous pouvez ajouter vos propres méthodes à ces classes. P>
Les modèles sont un excellent moyen de ne pas écrire "Spaguetti Code", car vous êtes un peu obligé de séparer votre code par fonctionnalité. P>
Clients Code> Tableau, avec Colonnes
ID CODE> (Autonum) et
Nom CODE> (VARCHAR). Disons que cela n'a qu'un enregistrement, ID = 1 et un nom = "Ford". Alors: p>
Clients code> dans la case de la classe de modèle
Client code>. LI>
ford = client.find (1) code> li>
ford.id code> et vous obtiendrez 1. Vous pouvez faire
Ford.name code> et vous obtiendrez la chaîne "Ford". Vous pouvez également modifier le nom du client en effectuant
Ford.name = "Chevrolet" code>, puis commettre les modifications de la base de données en faisant Ford.Save. Li>
ul>
Ford.Brands < / code> et vous obtiendrez une gamme d'objets représentant tous les enregistrements de la table des marques qui ont un client_id = 1. li>
modèles forts>: objets de domaine tels que activeRecord strong>: p> Fournit des méthodes dynamiques pour queriser des tables de base de données. Une table de base de données est définie comme une classe qui hérite de la classe ActiveRecord (exemple pseudo-php): p> nouveaux enregistrements sont créés en créant de nouvelles instances de classes héritées Activerecord: p> utilisateur code>,
compte code> ou
statut code>. Les modèles ne sont pas nécessairement pris en charge par un backend de base de données, comme par exemple le statut
code> ne peut être qu'une simple énumération statiquement typée.