2016-07-10 6 views
0

Ich versuche, ein Suchformular für meine Shops mit ransack zu schreiben. Derzeit kann ich mit der Option name_or_address_cont suchen, die entweder im Namen ODER in der Adresse aussieht. Wenn ich ein Geschäft Adidas in London hätte und ich Adidas London tippe, würde es keine Ergebnisse geben. Daher suchte ich nach einer Möglichkeit, die beiden Attribute zu verketten und nach der neuen zu suchen. Was ich in einigen alten Einträge gefunden war der folgende Code:Schienen, suchen mit Ransack gem, eine Zeichenfolge downcase

ransacker :search_name, :formatter => proc {|v| UnicodeUtils.downcase(v) } do |parent| 
    Arel::Nodes::NamedFunction.new('LOWER', 
     [Arel::Nodes::NamedFunction.new('concat_ws', [' ', parent.table[:name], parent.table[:address], parent.table[:id]])] 
    ) 
    end 

, die angeblich von einem Geschäft den Namen, die Adresse und die ID zu suchen. Wenn ich jedoch laufe, erhalte ich einen Fehler in den UnicodeUtils. Ich habe versucht, es in v.downcase zu ändern! aber ich bekomme einen weiteren Fehler. Irgendeine Idee, wie man mit diesem Problem umgeht? Vielen Dank!

Antwort

0

Es zwei Fehler waren ... Der erste, die ich gefunden, wie in der Dokumentation zu beheben, wo sie ein Beispiel für full_name hat link

die auch wie

ransacker :full_name, formatter: proc { |v| v.mb_chars.downcase.to_s } do |parent| 
    Arel::Nodes::NamedFunction.new('LOWER', 
    [Arel::Nodes::NamedFunction.new('concat_ws', 
     [' ', parent.table[:first_name], parent.table[:last_name]])]) 
end 

sehen, scheint es, dass die Fügen '' sollte durch Arel :: Nodes.build_quoted ('') ersetzt werden. Gefunden, dass in diesem issue

+0

Ist dies die richtige Antwort? Gibt es das erwartete Ergebnis zurück, wenn Sie nach "Adidas London" suchen? – chipairon

+0

Ja, tut es :) –

Verwandte Themen