2016-03-22 10 views
1

Ich habe drei Modelle mit Großeltern, Eltern, Kind Beziehung: Organization, Category, Post.Erstelle Bereich mit .where auf beiden Sammlung und Großelternteil

Ich versuche, einen Rahmen in meinem Post Modell zu erstellen, where zunächst auf der übergebene Sammlung und anschließend auf den Großeltern:

scope :ready, -> { 
    where("next_setup_at < ?", DateTime.current) 
    .joins(category: :organization) 
    .where("organizations.active = ?", true) 
} 

Aber Postgres mir einen Fehler wirft:

ActiveRecord::StatementInvalid: PG::AmbiguousColumn: ERROR: column reference "next_setup_at" is ambiguous LINE 1: ...zations"."id" = "categories"."organization_id" WHERE (next_setup... ^

: SELECT "posts".* FROM "posts" INNER JOIN "categories" ON "categories"."id" = "posts"."category_id" INNER JOIN "organizations" ON "organizations"."id" = "categories"."organization_id" WHERE (next_setup_at < '2016-03-22 15:57:19.971887') AND (organizations.active = 't')

Antwort

2

Werfen Sie einen Blick auf Ihre .where Klauseln. Die zweite Aufgabe ist sehr gut, um zu definieren, welche Spalte abgefragt werden soll.

where("organizations.active = ?", true) 

Die erste nicht.

where("next_setup_at < ?", DateTime.current) 

Sie müssen definieren, welche Tabelle die next_setup_at Spalte Verweise auf. Führt zu

where("posts.next_setup_at < ?", DateTime.current) 

Weitere imporvement

Sie leicht, was Tisch wie so in reiner Active referenzieren angeben:

where(posts: {next_setup_at: DateTime.current}, categories: {active: true}) 
+0

Die 'where' Methode verwendet den Namen der Tabelle, nicht die Beziehung des Name. – MrYoshiji

+0

ye danke! Schön Gotcha :) –

Verwandte Themen