2016-11-29 4 views
0

Das von den Rails-Dokumentation ist:ActiveSecord Joining-Syntax. Square Brackets vs Curly Brackets?

12.1.3.2 Nested Verbände (Multiple Ebene)

Category.joins(articles: [{ comments: :guest }, :tags]) 

Dies erzeugt den Beitritt:

SELECT categories.* FROM categories 
    INNER JOIN articles ON articles.category_id = categories.id 
    INNER JOIN comments ON comments.article_id = articles.id 
    INNER JOIN guests ON guests.comment_id = comments.id 
    INNER JOIN tags ON tags.article_id = articles.id 

Oder ich n Englisch: "alle Kategorien zurückgeben, die Artikel enthalten, in denen diese Artikel einen Kommentar eines Gastes enthalten, und wo diese Artikel ebenfalls ein Tag haben."

So dass alles sinnvoll ist. Aber wie bekomme ich diese SQL-in Active:

SELECT categories.* FROM categories 
     INNER JOIN articles ON articles.category_id = categories.id 
     INNER JOIN comments ON comments.article_id = articles.id 
     INNER JOIN guests ON guests.comment_id = comments.id 
     INNER JOIN tags ON tags.comments_id = comments.id 

Wie trete ich tags zurück zu comments. In Englisch möchte ich:

"alle Kategorien zurückgeben, die Artikel haben, wo diese Artikel einen Kommentar von einem Gast haben, und wo diese Kommentare auch ein Tag haben."

Noch wichtiger ist, was ist eine gute Möglichkeit, lockig vs eckigen Klammern zu denken?

Antwort

0

Ich denke, das ist das, was Sie suchen:

Category.joins(articles: { comments: [:guest, :tag] }) 

Denken Sie an geschweiften Klammern (Hash) als verschachtelte Bedingungen für eine verknüpfte Tabelle. Stellen Sie sich quadratische Klammern (Array) als Mittel zum Verbinden mehrerer Tabellen vor.

Verwandte Themen