Forum: Rails Germany Find mit include und commentable

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7dc6183602c65b027a7ef7dd78c62a36?d=identicon&s=25 Franz M. (xinu)
on 2009-03-21 14:19
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
F72025178d3e1768acafade2579c7a78?d=identicon&s=25 Thomas Jachmann (Guest)
on 2009-03-24 16:15
(Received via mailing list)
Moin Michael,

nö, so geht das nicht. Hast Du sicher beim Ausprobieren auch
gemerkt. :) 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 <Tabellenname>.<Feldname>. 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 ..:
This topic is locked and can not be replied to.