2014-01-08 10 views
5

Ich habe ein Active Modell mit einem Verfahren bekam wie folgt definiert:Fehler "Kein gültiges Prädikat" beim Upgrade von Meta_search auf Ransack?

def state 

    if deleted? 
    :deleted  
    else 
    :expired 
    end 

end 

Die 'search_method' wird im Modell wie folgt definiert:

search_method: Zustand

In die Ansicht:

= form.select: Zustand, {: abgelaufen => 'Abgelaufen', : Entfällt => 'Gelöschte'} .invert,: include_blank => 'Alle'

Mit Meta_search, arbeitete diese Methode gut. Aber wenn ich den Edelstein mit Ransack ersetzte, erhalte ich: ArgumentError in Sample Controller Kein gültiges Prädikat für Zustand.

Ich verfolge dieses Verhalten von meta_search search_methods, also könnte ich den falschen Ansatz nehmen. Kann mir bitte jemand helfen?

+0

Ich glaube, Sie brauchen das Prädikat auf das Feld wie 'state_start' anzuwenden. Sehen Sie sich dieses Problem https://github.com/activerecord-hackery/ransack/issues/22 an – phoet

Antwort

0

Ransack verwendet ein Prädikat, das am Ende des gesuchten Felds hinzugefügt wird, um anzugeben, wie danach gesucht werden soll. Wenn Sie in Ihrem Modell ein Attribut von :state haben, können Sie nach Zuständen suchen, die mit 'abgelaufen' oder 'gelöscht' übereinstimmen. Verwenden Sie dazu form.select :state_match,, wobei _match besagt, dass Datensätze mit dem Status von dem übereinstimmen, was Sie ausgewählt haben. (Dinge wie _cont (enthält) oder _start (beginnt mit)).

Ransack macht SQL-Abfragen, um Datensätze zu finden, also wenn Sie ein Attribut in Ihrem Modell wie :deleted_at hatten, könnten Sie nach Anwesenheit oder Mangel von suchen. Es wird nicht nach Methoden gesucht, nur nach den in der Datenbank gespeicherten Informationen.

Weitere Prädikate und Informationen sind hier: https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching

Verwandte Themen