So bin ich verwirrt darüber, wie ActiveRecord dies behandelt, und hoffte, jemand könnte mir einen Einblick geben.Polymorphe Beziehung Verwirrung
Ich habe eine Tabelle, die eine polymorphe Beziehung hat. Wir werden es Tabellenauswahl nennen. Dort habe ich definiert:
belongs_to :chooseable, polymorphic: true
Ich habe zwei Modelle, lassen Sie uns einen Film, und der andere spielt. Da drin, ich habe: has_many :choices as: chooseable, dependent: destroy
Im Modell mit der polymorphen Beziehung Ich habe zwei Bereiche:
scope :with_movies, -> {
includes(:movies)
.where("chooseable_type": "Measure")
}
scope :with_shows, -> {
includes(:shows)
.where(shows: { hidden: false })
}
Was ich ist verwirrend ist, wenn ich sage, users.choices.with_movies, und ich überlasse aus dem chooseable_type wo Zustand, AR bei mir stockt und sagt:
Unknown column 'choices.chooseable_type' in 'where clause': SELECT `movies`.* FROM `movies` WHERE `choices`.`chooseable_type` = 'Movie' AND `movies`.`id` IN (728)
Doch in dem zweiten Umfang with_shows, brauche ich nicht chooseable_type definieren - es funktioniert gut. Noch verwirrender ist es, wenn ich die where-Klausel with_shows entferne, funktioniert das nicht so gut.
Ich verstehe wirklich nicht, warum die Where-Klausel im zweiten Bereich ermöglicht eine richtige Abfrage generiert werden, aber ohne sie fällt es auf sein Gesicht.
Also, weil der andere Rahmen eine where-Klausel für die Shows Tabelle hat, weiß, dass es die chooseable_type Klausel auf die zeigt Tabelle anzuwenden, auch wenn dies nicht der Fall ausdrücklich sagen zu? Das ist mir so fremd. – Siraris
Versuchen Sie, 'puts with_shows.to_sql' zu erstellen, um die Abfrage zu erstellen. – mudasobwa