mysql und fulltext

Für eine Volltextsuche werden die entsprechenden Tabellenspalten vorbereitet:

alter table jpcs ADD FULLTEXT (title, artist)
alter table jpcs ADD FULLTEXT (title)

Eine Suche im Titel wird dann so aufgerufen:
SELECT artist from jpcs WHERE MATCH(artist) AGAINST(‘the band‘)
Eine Suche in Titel und Interpret wird mit dem anderen Index durchgeführt:
SELECT artist from jpcs WHERE MATCH(artist,title) AGAINST(‘the band‘)

Die Indices werden mit DROP INDEX wieder entfernt

Ggfs. ist es nötig, die Minimallänge eines Volltextsuchtextes zu ändern. Dies geschieht auf Unixsystemen in der Datei /etc/my.cnf mit folgendem Eintrag:

[mysqld]

ft_min_word_len = 3

Posted in Allgemein | Tagged | Leave a comment

Exceptionausgabe im log

Für eine vernünftige Fehlerrückverfolgung sollte der komplette Exception trace protokolliert werden:

begin
code
rescue
logger.error { “$!.backtrace” }

end

Posted in Rails | Leave a comment

Ajax Pagination mit will_paginate

Ein wunderbarer Helfer für das Blättern in einer ActiveRecord-Collection ist “will_paginate”,
das für den Normalfall auch einfach zu installieren und anzuwenden ist. Zur Einführung sei hier auf den Railscast verwiesen: http://railscasts.com/episodes/51 .

Etwas unübersichtlich wird es aber, wenn es darum geht, dieses Plugin für Ajaxlinks und bestehende Arrays bzw. Collections anzupassen. Daher will ich die Vorgehensweisen hier kurz zusammenfassen. Ich beziehe mich hierbei auf RAILS 2.1.0 und will_paginate 2.3.2 , bei älteren Versionen ist die Wahrscheinlichkeit ziemlich groß, das irgend etwas nicht funktioniert.

aus diesem Blog entnommen:http://weblog.redlinesoftware.com/2008/1/30/willpaginate-and-remote-links

Die Klasse RemoteLinkRenderer wird in helpers in der Datei remote_link_renderer.rb definiert:

class RemoteLinkRenderer
def prepare(collection, options, template)
@collection = collection
@options = options @template = template
@remote = @options[:params].delete(:remote) || {}
# reset values in case we’re re-using this instance @total_pages = @param_name = @url_string = nil
end
def page_link_or_span(page, span_class = ‘current’, text = nil)
text ||= page.to_s
if page and page != current_page
@template.link_to_remote(text, {:url => url_for(page),
:method => :get}.merge(@remote),

{:href => url_for(page),:title => “Seite #{page}”})

else

@template.content_tag :span, text, :class => span_class

end
end
end
Im View wird will_paginate mit dem Parameter renderer aufgerufen:
Ohne “renderer” wird die Standardfunktion ausgeführt.

Posted in Rails | Leave a comment