0

J'ai l'intention de stocker dans une base de données une quantité minimale d'informations relatives à un livre (titre, isbn). Cependant, à l'affichage je voudrais afficher des attributs supplémentaires (pages, auteur, image de couverture) non stockés dans la base de données. Je prévois d'obtenir cette information à partir des Amazon Web Services (AWS) en utilisant Ruby/AWS. Je suis très nouveau sur Ruby on Rails et je ne suis pas sûr exactement comment cela devrait/devrait être effectué. Parmi les options qui me viennent à l'esprit, citons la modification du contrôleur de livres ou la création d'un modèle entièrement séparé basé sur les entités Amazon qui repose sur la recherche de livres répertoriés uniquement dans ma base de données.Ruby on Rails MVC Question

Répondre

3

Votre modèle de livre ActiveRecord peut être personnalisé pour récupérer les attributs supplémentaires d'AWS. Votre point de vue et les contrôleurs seront sans idée et au sec.

+0

Cela a du bon sens. Devrais-je créer des définitions ou des attributs pour effectuer la recherche à partir du modèle? – ahsteele

+0

Créer des méthodes nommées (pages, auteur, image_couverture, etc.). Dans ces méthodes, récupérez les informations amazon et renvoyez la valeur demandée. Vous n'aurez probablement pas besoin de faire un appel AWS pour chaque attribut afin de mettre en cache les résultats AWS en les glissant dans une variable d'instance de l'enregistrement actif tel que (@my_aws_result). Cela ne persistera pas, mais vous limiterez au moins les demandes AWS à 1 par demande d'utilisateur final. Évidemment, vous pouvez utiliser une mise en cache plus avancée sans vous soucier de perturber votre contrôleur et vos vues. Le modèle va encapsuler ces détails. – jrhicks

1

Je suggère de créer des méthodes dans le modèle. Allez-vous toujours tirer l'info supplémentaire chaque fois que vous montrez ces entrées? Sinon, vous voudrez peut-être avoir une action différente du contrôleur pour le "étendu" (c'est-à-dire avec des informations amazon) ou "limité" (c'est-à-dire sans l'information amazon) et avoir l'autre standard. De cette façon, vous pouvez tirer exactement ce que vous voulez quand vous le voulez et assurez-vous que vous frappez Amazon seulement quand vous en avez besoin, et non avec chaque appel ou appel d'index.

3

Lorsque vous avez besoin de traiter des données, dans n'importe quel environnement MVC, il doit aller dans le modèle. Vous pouvez créer une autre méthode other_information qui utilise || = pour obtenir les autres informations d'AWS ou renvoyer les informations d'une variable d'instance. Ou bien vous pouvez créer une méthode find_with_info qui récupère tout en même temps :)

Mais gardez avec défi toutes les tâches liées aux données dans le modèle.