J’ai trouvé la console Rails et j’ai appris que vous pouvez faire de la magie noire telle que :
DB.exec(<<~SQL)
UPDATE topics
SET title = 'psql redo!'
WHERE id = 886
SQL
Comment puis-je savoir quelles commandes/fonctions peuvent être exécutées dans la console ? Comment puis-je en apprendre davantage sur cette sorcellerie ?
Remarque : si ce n’est pas déjà évident, je ne sais rien sur Ruby ou Rails.
Vous devriez vraiment apprendre Rails et ne pas modifier directement cette base de données. Ce que j’ai fait, c’est trouver un livre sur Rails et le lire. Et à un moment donné, j’ai aussi regardé un livre sur Ruby. Je suis assez vieux pour me souvenir quand les livres étaient le seul moyen d’apprendre sur les ordinateurs. Si je comprends bien, il existe de nombreux sites sur Internet qui peuvent vous donner un tutoriel Rails. Je pense qu’il existe un moyen de rechercher sur Internet pour les trouver.
En voici un que j’ai trouvé
Voici comment mettre à jour des choses avec Rails, mais lire l’un de ces guides vous donnera rapidement une idée de son fonctionnement.
t=Topic.find(123)
t.title='mon nouveau titre'
t.save
# ou
t.update(title: 'mon nouveau titre')
Lorsque vous faites des choses via Rails, cela effectue un certain nombre de vérifications. Ces vérifications vous empêcheront généralement de faire d’énormes erreurs. Vous ne devriez probablement pas enfreindre ces règles tant que vous ne les comprenez pas.
Par exemple, si vous voulez que les utilisateurs créent des sujets dans une certaine catégorie via l’API, alors ils doivent avoir les droits pour créer un sujet dans cette catégorie. Si vous voulez vraiment qu’un sujet créé par un utilisateur existe dans une catégorie à laquelle il n’a pas les droits, alors créez-le dans une autre catégorie, puis faites-le déplacer par un administrateur (ou faites-le via Rails, ce qui n’appliquera pas les permissions de catégorie).
Bien que cela puisse facilement provoquer une exception (que vous êtes conseillé de gérer), vous pourriez donc vouloir utiliser find_by comme alternative qui retournera nil plutôt que de lever une exception, selon la façon dont vous souhaitez gérer les choses.
C’est en cela que nous nous ressemblons. J’ai eu besoin de faire du SQL avec une jointure interne compliquée et une autre avec une union simple, pour lesquelles j’ai obtenu l’aide de l’IA. Je regrette de ne pas avoir prêté un peu plus attention à mon cours de base de données en 1986, j’aurais su comment faire.
Pourquoi ne pas laisser l’IA écrire des commandes Rails pour vous ?
Pour les requêtes standard de sélection, de filtre, de tri et de limite, je les écris moi-même, mais pour tout ce qui est plus compliqué, je demande maintenant à l’IA. J’ai demandé à l’IA :
« écris une requête qui montre une catégorie, puis liste les 5 meilleurs créateurs de sujets pour cette catégorie et le nombre de sujets qu’ils ont créés »
Et immédiatement, elle m’a renvoyé (ceci n’est pas une base de données Discourse) :
WITH TopTopicStarters AS (
SELECT
c.id AS category_id,
c.name AS category_name,
u.name AS user_name,
COUNT(t.id) AS num_topics_started,
ROW_NUMBER() OVER(PARTITION BY c.id ORDER BY COUNT(t.id) DESC) AS rank
FROM topics t
JOIN categories c ON t.category_id = c.id
JOIN users u ON t.user_id = u.userid
GROUP BY c.id, u.name
)
SELECT
c.category_name,
tts.user_name,
tts.num_topics_started
FROM categories c
JOIN TopTopicStarters tts ON c.id = tts.category_id
WHERE tts.rank <= 5;
Aucun moyen que j’aurais pu trouver ça sans beaucoup de recherches sur Google et d’essais et erreurs !