Find mit include und commentable


#1

Hallo.

Ich habe ein kleine Problem und benötige eure Hilfe.

Ich habe Kommentar die mit commentable_type und commentable_id an ein
Objekt gebunden sind. Im aktuellen Fall ist commentable nur ein
BlogEntry.

Ein BlogEntry liegt in einer Kategorie. Ein Kategorie kann sichtbar oder
unsichtbar sein. Ich möchte aber nur Kommentare anzeigen wenn der
BlogEntry wo das Kommentar geschrieben wurde in einer sichtbaren
Kategorie sind.

So etwas in der Art:
Comment.find(:all, :include => {:commentable => :category}, :conditions
=> {:commentable.category.visible => true})

Kann das so in etwas funktionieren?
Bitte um eure Hilfe.

danke
Michael


#2

Moin Michael,

nö, so geht das nicht. Hast Du sicher beim Ausprobieren auch
gemerkt. :slight_smile: In Deinen :conditions rufst Du die Methode category
auf :commentable, also einem Symbol, was die Methode normalerweise
nicht kennt. Aber anders geht es:

Comment.all(:include => {commentable => :category}, :conditions =>
{‘categories.visible’ => true})

ActiveRecord verbindet damit die beteiligte Tabellen über LEFT OUTER
JOINs, und somit kannst Du auf alle Felder aller Tabellen zugreifen
und nur die Zeilen selektieren, bei denen die Kategorie sichtbar ist.
Hierfür verwendest Du die Notation .. Habe ich
gerade nur mit einem simplen include getestet, sollte so aber auch
über mehrere Ebenen (Comment -> Commentable -> Category) hinweg
funktionieren.

Gruß, Thomas

Am 21.03.2009 um 14:19 schrieb Michael …: