Commandes de la console Rails

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.

1 « J'aime »

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).

8 « J'aime »

La console Rails parle ruby.

Puisque Discourse est open source, vous pouvez apprendre la programmation de bas niveau en lisant le code source sur GitHub.

1 « J'aime »

t=Topic.find(123)
t.title=‘mon nouveau titre’
t.save

ou

t.update(title: ‘mon nouveau titre’)

Merci. Une chose que je n’ai pas pu comprendre était comment attribuer une valeur avec une valeur extraite d’ailleurs, par exemple

t.update(title: topic2.find(123).title)

1 « J'aime »

Vous pourriez faire quelque chose comme ceci :

t = Topic.find(123)
t.update(title: Topic.find(124).title)

Mais cela demande plus d’efforts que ce que cela vaut. Vous pouvez faire les choses par étapes :

t1 = Topic.find(123)
t2 = Topic.find(124)
t1.update(title: t2.title)
3 « J'aime »

Moi aussi : About this Book :: Why's (Poignant) Guide to Ruby

5 « J'aime »

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.

4 « J'aime »

Mec. J’ai toujours pensé que RoR était une relique des années 2000, je n’aurais jamais imaginé me retrouver à apprendre ça ! :slight_smile:

1 « J'aime »

SQL est une relique des années 1960. :winking_face_with_tongue:

1 « J'aime »

« La niche » paie les factures !

3 « J'aime »

J’utilise en fait l’IA pour écrire des requêtes SQL. Elle peut le faire beaucoup plus rapidement que moi !

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. :rofl:

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 !

Il existe de nombreux exemples dans le plugin et la catégorie d’exploration de données.

2 « J'aime »