2012-04-06 16 views
0

Ok, so habe ich ein Datumsfeld, das ich auf der Suche muß, aber ich muß darauf bis zum Tag wie in einer MySQL-AbfrageWie bekomme ich die Suche, um den attr_accessor zu verwenden?

search_conditions << ["DAY(open_date) != ?", event.thursday.day] if options[:thur].blank? 

und ich brauche, um zu suchen, diese Bedingung zu tun Sphinx mit Denken so habe ich versucht, diese

attr_accessor :event_day 

    def event_day 
    self.start_date.day 
    end 

    #thinking sphinx configurations for the event search 
    define_index do 
    indexes event_day 
    ... 
    ... 

und bei der Suche habe ich versucht, diese

search_string = "@event_day -#{event.thursday.day}" unless options[:thur].blank? 

aber ich erhalte diesen Fehler

index event_core: query error: no field 'event_day' found in schema 

Jede Art und Weise, diese Arbeit zu machen

Antwort

1

Sie nicht eine rubin Attribut in einer SQL-Abfrage verwenden kann. Schienen ist nicht so schlau.

Sie müssen SQL schreiben, die diese Funktion repliziert, oder filtern Sie die Ergebnisse einer Abfrage durch sie, z.B.

+0

nicht sicher, wie das diese Situation löst ... erstelle ich eine Methode, die den Tag zurückgibt – Trace

0

Wie Michael's darauf hingewiesen hat, sind Ruby-Attribute nicht von Sphinx zugänglich - es spricht direkt mit Ihrer Datenbank.

So können Sie entweder eine Spalte erstellen, die den Ereignistageswert enthält, und diese über Sphinx referenzieren, oder Sie können ein Feld erstellen, das eine SQL-Funktion verwendet (die je nach MySQL oder PostgreSQL variieren kann) Tag aus der Spalte start_date - nicht besonders komplex. Es würde wahrscheinlich am Ende wie folgt aussehen:

Verwandte Themen