Rails Konsolenbefehle

Ich habe die Rails-Konsole gefunden und gelernt, dass man damit Blackmagic betreiben kann, wie zum Beispiel:

DB.exec(<<~SQL)
  UPDATE topics
  SET title = 'psql redo!'
  WHERE id = 886
SQL

Wie finde ich heraus, welche Befehle/Funktionen in der Konsole ausgeführt werden können? Wie kann ich mehr über diese Zauberei erfahren?

Hinweis: Falls noch nicht offensichtlich, ich weiß nichts über Ruby oder Rails.

1 „Gefällt mir“

Sie müssen wirklich etwas über Rails lernen und nicht direkt diese Datenbank ändern. Was ich getan habe, war, ein Rails-Buch zu finden und es zu lesen. Und irgendwann habe ich mir auch ein Ruby-Buch angesehen. Ich bin alt genug, um mich daran zu erinnern, als Bücher die einzige Möglichkeit waren, etwas über Computer zu lernen. Soweit ich weiß, gibt es viele Websites im Internet, die Ihnen ein Rails-Tutorial geben können. Ich denke, es gibt eine Möglichkeit, das Internet zu durchsuchen, um sie zu finden.

Hier ist eines, das ich gefunden habe:

So aktualisieren Sie Dinge mit Rails, aber das Lesen eines dieser Leitfäden gibt Ihnen schnell eine Vorstellung davon, wie es funktioniert.

t=Topic.find(123)
t.title='my new title'
t.save

# oder
t.update(title: 'my new title')

Wenn Sie Dinge über Rails tun, werden viele Prüfungen durchgeführt, ob Dinge funktionieren. Diese Dinge werden Sie normalerweise davon abhalten, große Fehler zu machen. Sie sollten diese Regeln wahrscheinlich nicht brechen, bis Sie sie verstehen.

Wenn Sie beispielsweise möchten, dass Benutzer über die API Themen in einer bestimmten Kategorie erstellen, müssen sie über die Rechte verfügen, ein Thema in dieser Kategorie zu erstellen. Wenn Sie wirklich möchten, dass ein von einem Benutzer erstelltes Thema in einer Kategorie existiert, für die er keine Rechte hat, dann erstellen Sie es in einer anderen Kategorie und lassen Sie es dann von einem Administrator verschieben (oder tun Sie es über Rails, was die Berechtigungen für Kategorien nicht erzwingt).

8 „Gefällt mir“

Die Rails-Konsole spricht Ruby.

Da Discourse Open Source ist, können Sie durch das Lesen des Quellcodes auf GitHub Low-Level-Programmierung lernen.

1 „Gefällt mir“

t=Topic.find(123)
t.title=‘mein neuer Titel’
t.save

oder

t.update(title: ‘mein neuer Titel’)

Danke. Eine Sache, die ich nicht herausfinden konnte, war, wie man einen Wert mit einem Wert zuweist, der von irgendwoher abgerufen wurde, z. B.

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

1 „Gefällt mir“

Sie könnten etwas tun wie:

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

Aber das ist mehr Aufwand als es wert ist. Sie können Dinge schrittweise tun:

t1 = Topic.find(123)
t2 = Topic.find(124)
t1.update(title: t2.title)
3 „Gefällt mir“

Ich auch: About this Book :: Why's (Poignant) Guide to Ruby

5 „Gefällt mir“

Obwohl dies leicht eine Ausnahme verursachen könnte (die Sie abfangen sollten), möchten Sie vielleicht find_by als Alternative verwenden, die nil zurückgibt, anstatt eine Ausnahme auszulösen, je nachdem, wie Sie die Dinge verwalten möchten.

4 „Gefällt mir“

Mann. Ich dachte immer, RoR sei ein Relikt aus den Nullerjahren, ich hätte nie gedacht, dass ich das noch lernen würde! :slight_smile:

1 „Gefällt mir“

SQL ist ein Relikt aus den 1960er Jahren. :winking_face_with_tongue:

1 „Gefällt mir“

"Nische" bezahlt die Rechnungen!

3 „Gefällt mir“

Ich benutze KI, um SQL-Abfragen zu schreiben. Das geht viel schneller als bei mir!

So sind wir gleich. Ich musste etwas SQL mit einem komplizierten Inner Join und einem weiteren mit einem einfachen Union machen, bei dem mir die KI geholfen hat. Ich schüttelte den Kopf, wenn ich 1986 in meiner Datenbankklasse etwas mehr aufgepasst hätte, hätte ich gewusst, wie es geht. :rofl:

Warum nicht die KI bitten, Rails-Befehle für Sie zu schreiben?

Für Standard-Abfragen wie select, where, sort, limit schreibe ich diese selbst, aber für alles Kompliziertere frage ich jetzt die KI. Ich habe die KI gefragt:

„Schreibe eine Abfrage, die eine Kategorie anzeigt und dann die Top 5 Themenstarter für diese Kategorie und die Anzahl der von ihnen gestarteten Themen auflistet.“

Und sofort gab sie zurück (dies ist eine Nicht-Discourse-DB):

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;

Keine Chance, dass ich das ohne viel Googeln und Ausprobieren hätte herausfinden können!

Es gibt viele Beispiele im Daten-Explorer-Plugin und in der Kategorie.

2 „Gefällt mir“