Stefan Frank schrieb:
>>
>>
>>>> Wie dem auch sei: Was soll ich nun mit den Objekten anfangen?
>>>> Natürlich könnte ich stupide in jede Eigenschaft eines Objektes
>>>> hineinschauen, prüfen, ob der Suchtext darin vorkommt und dann
>>>> entsprechendes HTML generieren - aber das kanns doch nicht sein?
>>>
>>> Wie man die Suchergebnisse dann anzeigt, dass ist dann Sache der
>>> Anwendung: Meist hat man da ja verschiedene Objekte in der Ergebnismenge
>>
>> und da liegt der Hase im Pfeffer...
>>
>>> und für jedes Objekt muss man zwei Sachen Überlegen:
>>>
>>> 1) wie soll es sich auf der Suchergebnisseite darstellen: hier machen
>>> wir z.B. auf jedes suchbare Objekte eine methode summary, die dann
>>> jeweils einen Text zurückgibt, den man auf so einer Seite anzeigen kann.
>>
>> kannst Du das etwas näher erläutern?
>>
>> Ich stelle mir da so etwas wie ein "virtuelles Attribut" vor, das dann
>> in jedem gefundenen Objekt als Methode zur Verfügung steht und sich aus
>> den indizierten Spalten zusammensetzt. So kann ich einfach aüber die
>> gefundenen Objekte iterieren und auf diese "Standard"-Methode zugreifen.
>>
>> Liege ich richtig?
> 
> na, ich weiß nicht, ob man das unbedingt automatisch zusammen bauen
> will: also entweder ein methode summary, die man dann pro Objekt anders
> überschrieben wird (mal blogpost.text, mal user.description zurück
> gibt...) oder als Alternative im view pro Objekt ein  anderes Template
> ziehen, das dann jeweils für das Objekt die entsprechenden Felder rendert.

Ich mach das jetzt mal so - ich sehe keine bessere Alternative:
Ich definiere ein virtuelles Attribut in jedem Model, das ich
indizieren will und vergebe 3 Standardeigenschaften im Ergebnishash
(3 ist jetzt mal willkürlich gewählt!):

def summary
  { :title => self.title, :body => self.body, :url => nil }
end

Für :url vergebe ich im Beispiel noch NIL weil ich mir noch
Gedanken über den Link machen muss - aus dem Model ist das eher
kompliziert - ein "geht nicht" akzeptiere ich aber nicht :)
Vielleicht ersetze ich :url durch was anderes oder lasse es
ganz weg aber der Grundgedanke sollte passen.

Die anderen 2 Eigenschaften kann ich auf 'self.content' oder
'self.headline' setzen - was das Objekt halt hergibt...
Nach außen hin schaut es immer gleich aus!

So kann ich über jedes gefundene Objekt iterieren, prüfen,
ob es auf 'summary' reagiert und die Felder in *einer* View
ausgeben. Ist sicher nicht optimal, aber im Moment fällt mir
nichts besseres ein - man muss eh jedes Model zum indizieren
anfassen, auf 3 Zeilen mehr kommt es dann auch nicht mehr an.

Und da in meinen Models fast jedesmal eine andere Methode
zum gesuchten Text führt (Asche auf mein Haupt), hält sich
ein Verstoß gegen DRY in Grenzen ;)

Auf jeden Fall ein dickes Danke für den Tip!
Torsten
_______________________________________________
rubyonrails-ug mailing list
[email protected]
http://mailman.headflash.com/listinfo/rubyonrails-ug

Antwort per Email an