7
votes

Rails logiques dans les contrôleurs?

Je lis toujours à propos de garder les contrôleurs minces et de faire toute la logique dans les modèles. Bien que cela me donne des sens pour interagir avec des bases de données, qu'en est-il des situations où il n'y a pas besoin de pour les interactions de base de données?

J'ai un module assez complexe dans mon application qui interagit avec plusieurs API tiers différentes. J'utilise des appels Ajax vers mon contrôleur, où toutes les données sont recueillies à partir des API, puis organisées. Ensuite, il est affiché via les fichiers correspondants .js.erb ou .html.erb.

Est-ce la bonne façon de gérer ce genre de situation? Je suis nouveau dans les rails et je ne veux pas m'occuper d'avoir mal à faire de mal.


0 commentaires

3 Réponses :


8
votes

Les modèles ne sont pas seulement pour traiter de la base de données, mais pour travailler avec des données en principe.

Autant que nous ne savons pas quelles sont les situations que vous entendez, je peux simplement présenter des situations.

Ajax Appelez pour les gros maths calculant. Il ne s'agit pas de la base de données touchante et même il peut être calculé dans le modèle sans défaite. xxx

Vous pouvez donc voir que vous pouvez le calculer directement dans votre contrôleur, mais il doit être calculé dans Votre modèle, c'est donc une solution réutilisable et propre.

Un autre exemple utilise certains attributs virtuels. Noms. Vous pouvez stocker premier, deuxième et troisième nom dans les colonnes de saparate, vous devez donc le rejoindre. Vous pouvez créer la méthode PrivAE dans Contrerler, mais bien sûr, c'est une mauvaise idée. xxx

afin que vous puissiez l'appeler partout dans votre projet: xxx

et ainsi de suite sur


0 commentaires

2
votes

C'est une bonne question.

Même si vous n'avez pas besoin d'utiliser une base de données, vous pouvez toujours prendre une approche OOP / MVC pour organiser votre code et envelopper vos données, votre logique et votre comportement dans les modèles.

Organisation et encapsulation de code et d'encapsulation dans les objets de modèle est toujours utile et important!

dans Rails 3, vous pouvez faire des modèles non persistants en incluant simplement certains des modules ActiveModel qu'Aciverecord contient. Par exemple: xxx


0 commentaires

4
votes

logique modèle dans les modèles.

  • Maintenir des associations.
  • Maintenir des attributs complexes.
  • Maintenir des validations.
  • représente des concepts de l'entreprise / de l'industrie.

    logique contrôleur dans les contrôleurs.

    • Vérifiez qu'un utilisateur est autorisé à modifier une ressource.
    • Tirez et agrégez les données pour passer dans un modèle de vue.
    • Trouver le modèle de vue de droite.
    • Composez JSON pour la réponse de l'API.
    • Réessayer Échec de l'épargne.

      Les modèles n'ont pas besoin d'être activerecord s. Vous pouvez faire un lot entier avec des modèles - le «noyau» de votre appareil - qui n'a rien à voir avec la persistance. Il suffit de ne pas mettre la logique de contrôleur dans ces modèles.


0 commentaires