2010-12-09 11 views
0

Neuer Rails-Programmierer hier. Es gibt wahrscheinlich eine ziemlich einfache Lösung, aber ich kann es einfach nicht herausfinden. Hier ist der Deal: Nehmen wir an, ich habe viele Beiträge auf einer einzigen Seite. Jeder Post hat ein Inhaltsfeld und einige dieser Inhaltsfelder enthalten # Hashtags innerhalb des Inhalts.Hashtag-Filterung mit Ruby on Rails

Ich möchte einen Algorithmus entwickeln, der den Inhalt eines jeden einzelnen Post scannt (etwa alle 2 Sekunden) und zeigt eine Liste aller hashtag. Ich denke, AJAX wird notwendig sein, weil die Beiträge AJAX-Edit-in-Place haben. Wenn ein Beitrag geändert wird und ein neuer Hashtag erstellt wird, sollte die Hashtagliste automatisch aktualisiert werden, um dies zu berücksichtigen. Außerdem sollte jeder Hashtag in der Hashtagliste anklickbar sein, eine Suchabfrage senden und wiederum die Posts anzeigen, die den ausgewählten Hashtag enthalten.

Dieses Ergebnis ist ähnlich wie Tagging und einen Tag-Cloud, sollte aber dynamisch und integriert wird (im Gegensatz ein Tag-Feld für jeden Post zu haben). Ich möchte den Posts keine Tags als Datenbankspalte hinzufügen. Ich möchte nur, dass die Anwendung den Inhalt jedes einzelnen Posts scannt und eine anklickbare Hashtag-Liste anzeigt.

Alle Vorschläge werden sehr geschätzt.

Antwort

0

Persönlich würde ich jQuery verwenden, um die AJAX-Funktionalität Sie implementieren müssen. Javascript wird verwendet, um den Server auf neue Hashtags zu überprüfen, und die eigentliche Hashtag-Suche wird auf dem Server durchgeführt. In Ihrem Beitrag Modell, könnten Sie so etwas wie dies haben die eigentliche Suche zu tun:

class Post < ActiveRecord::Base 
    # class methods 
    class << self 
    def hashtags 
     tags = [] 

     # cycle through all posts that contain a hashtag, and add them to list 
     Post.all(:conditions => 'body like "%#"').each do |post| 
     tags += post.hashtags 
     end 

     # remove duplicates and sort alphabetically 
     tags = tags.uniq.sort 
    end 
    end 

    # instance methods 
    def hashtags 
    @hashtags ||= body.scan(/#\w+/) 
    end 
end 

Es gibt zwei Methoden, die hier mit dem gleichen Namen, aber man ist auf der Klasse aufgerufen (Post.hashtags) alle Hashtags für alle zu erhalten Posts, und der zweite wird an einer einzigen Instanz (post.hashtags) aufgerufen, um nur die Hashtags von diesem Post zu bekommen.

Es gibt mehrere andere Stücke des Puzzles - Ihr Controller-Code, Ihre Ansichten und Ihre Javascript. Diese Frage ist eine große Aufgabe für eine Freiwilligen-Site. Sie verlangen, dass verschiedene Dinge für Sie erledigt werden.

Mein Rat ist, den Aufbau dieses zu starten, wie ich beschrieben habe, und um Hilfe bitten auf die Stücke, die Sie Schwierigkeiten haben, mit auf dem Weg. Wir sind mehr als glücklich zu helfen, aber Sie fragen nach einem gesamten Javascript-gesteuerten MVC-Stack. Versuchen Sie, Ihre Fragen auf etwas zu beschränken, das in 5-10 Minuten beantwortet werden kann, und Sie erhalten wahrscheinlich viel mehr Feedback und Hilfe.

Viel Glück!

+0

Danke für die Hilfe! Ich wusste, dass es mehr Puzzleteile gab, aber das war genau das, wonach ich gesucht hatte. – aguynamedloren