2017-08-15 3 views
0
class Post < ActiveRecord::Base 
    has_many :categorizations 
    has_many :categories, through: :categorizations 

class Categorization < ActiveRecord::Base 
    belongs_to :category 
    belongs_to :post 
end 

class Category < ActiveRecord::Base 
    has_many :categorizations 
    has_many :posts, through: :categorizations 
end 

Für die oben genannte Zuordnung muss ich folgende Abfrage durchführen.Schienen finden alle Datensätze für eine Sammlung von Datensätzen

@posts = Post.includes(:categories).where(active: true) 
@categories = @posts.categories 

Offensichtlich ist diese Abfrage @categories = @posts.categories nicht funktioniert, aber wie würde ich das tun?

aktualisieren: Mit beiden Antworten unten ich diesen Fehler

Category Load (1.9ms) SELECT "categories".* FROM "categories" WHERE "categories"."post" IN (SELECT "posts"."id" FROM "posts") 
SQLite3::SQLException: no such column: categories.post: SELECT "categories".* FROM "categories" WHERE "categories"."post" IN (SELECT "posts"."id" FROM "posts") 
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: categories.post: SELECT "categories".* FROM "categories" WHERE "categories"."post" IN (SELECT "posts"."id" FROM "posts") 
+0

du kannst das nicht tun, denn wenn du @kategorien haben willst, muss deine Codezeile von 'Category.someting' beginnen. Jetzt, da Sie eine Korrekturbeziehung haben, können Sie '@categories = Category.joins (: posts) .where (posts: {active: true})' – djothefou

Antwort

0

Um Ihre Category Klasse hinzufügen:

class Category < ActiveRecord::Base 
    has_many :categorizations 
    has_many :posts, through: :categorizations 

Dann können Sie so etwas wie:

@posts = Post.includes(:categories).where(active: true) 
@categories = Category.where(post: @posts) 
+0

Ich bekomme einen Fehler. Bitte überprüfen Sie mein Update – asdlfkjlkj

0

In einer Abfrage:

@categories = Category.joins(:posts).where(posts: { active: true }) 
+0

Ich bekomme einen Fehler. Bitte überprüfen Sie mein Update – asdlfkjlkj

+0

Sind Sie sicher, dass Sie diesen Fehler mit diesem Code bekommen? Ich kann die Verbindung nicht sehen. Vielleicht haben Sie nicht den Assoziationsteil in das Kategoriemodell? –

+0

Alle Assoziationen hinzugefügt – asdlfkjlkj

0

Zuerst müssen Sie die Beziehungen erklären:

In Ihrem Categorization Modell Sie

belongs_to :post 

Und in Ihrem Category Modell

has_many :categorizations 
has_many :posts, through: :categorizations 

haben müssen, wenn Sie das vergessen, aktiv notieren Sie, dass post eine Spalte von Cate ist blutig, weil du ihm nie erzählst, dass das eine Beziehung ist

+0

Ich denke, ich habe diese Dinge schon – asdlfkjlkj

Verwandte Themen