Hallo zusammen,
@Daniel: Ich arbeite mit PostgreSQL und das mit dem DISTINCT habe
ich
auch schon probiert. Wenn ich das so realisiere:
named_scope :legal, lambda { |*args|
{ :select => "DISTINCT books.*,authors.*",
:joins => :authors,
:order => ["LOWER(" + sort + ") " + order.upcase]}
}
und nach dem Namen des Autors sortieren will, meckert die Datenbank,
dass sie das entsprechende Attribut nicht finden kann.
@Rainer:
Ich verstehe dein Problem nicht ganz.
Du möchtest nach Author sortieren, aber trotzdem Bücher mit
mehreren
Autoren nur einmal anzeigen!?
Genau so soll es sein. Ein Eintrag in meiner Liste sieht dann so aus
(alle Autoren sind gleichwertig):
1. Autor1, Autor2, Autor3 | Titel1
2. Autor1 | Titel2
3. Autor2, Autor3 | Titel3
Man könnte auch eine habtm-Relation anlegen, da hast Du recht. So
habe
ich etwas Redundanz in der DB, aber das ist nicht weiter dramatisch.
Mit include statt joins funktioniert das ganze, ich muss allerdings
"explizit" den Namen der Autoren-Tabelle anhängen, wenn ich nach
einem
Attribut aus dieser Tabelle sortieren will:
named_scope :sorted, lambda {|sort,order|
sort = "authors." + sort if sort.downcase.eql?("last_name")
{
:include => :authors,
:order => sort + " " + order.upcase
}
}
Bei welchem der Autoren soll es denn dann in der Sortierung
angezeigt
werden!? Du musst schon einen eindeutigen Autoren definiert haben,
damit
das funktioniert.
Du musst mit mehreren Autoren eh eine habtm-Relation haben, da
Autoren
im Normalfall mehr als ein Buch schreiben. In dem Falle würde ich
keine
Join-Tabelle verwenden sondern eine JoinClass mit boolean
main_author.
So ganz logisch klingt deine Anfrage nicht.
Generelll könntest du dir einfach überlegen nach deinen NamedScopes
einfach ein .uniq anzuhängen, damit kannst du doppelte Einträge
ausfiltern.
Das .uniq nach dem NamedScope werde ich mal testen.
Danke für die Hilfe,
Tobias
Gruesse, Rainer
On Mon, Mar 08, 2010 at 08:39:03PM +0100, Tobias Weiß wrote:
Hallo zusammen,
ich stehe gerade etwas auf dem Schlauch, vielleicht kann mir
jemand
weiterhelfen:
Ich habe zwei Models:
Author.rb
Book.rb
has_many :authors
In book.rb habe ich einen named_scope, um die gefundenen Bücher
nach
einem bestimmten Parameter zu sortieren. (Später wird der noch mit
anderen Scopes zu einer Filterkette verknüpft)
named_scope :sorted, lambda {|sort,order| {
:joins => :authors,
:order => ["LOWER(" + sort + ") " + order.upcase]}
}
Mein Problem:
Ich möchte eine Liste mit allen Büchern haben, aber jedes Buch
soll
nur einmal in der Liste erscheinen, egal wieviel Autoren es hat.
Book.sorted liefert mir jedoch Duplikate, sobald ein Buch mehrere
Autoren hat, was augenscheinlich am join liegt. Hat jemand ne
Idee,
wie man das verhindern kann?
Grüße, Tobi
_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug
_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug
_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug