2012-09-26 4 views
5

Wie carvil habe ich in meinem Modell eine Datetime für created_at, obwohl ich das "equals" Prädikat wollte, um die created_at und ein Datum (wie '2012-09-26') zu vergleichen.Ruby on Rails Racks Date-to-Date Suche

So habe ich in meinem Modell (in der Reihenfolge gegossen Attribute hinzufügen und die alte created_at/update_at/deleted_at ausziehen:

ransacker :created_at do 
    Arel::Nodes::SqlLiteral.new("date(items.created_at)") 
end 

ransacker :updated_at do 
    Arel::Nodes::SqlLiteral.new("date(items.updated_at)") 
end 

ransacker :deleted_at do 
    Arel::Nodes::SqlLiteral.new("date(items.deleted_at)") 
end 

# Hide some attributes for advanced search 
UNRANSACKABLE_ATTRIBUTES = ["created_at", "updated_at", "deleted_at"] 

def self.ransackable_attributes auth_object = nil 
    (column_names - UNRANSACKABLE_ATTRIBUTES) + _ransackers.keys 
end 

Aber wenn ich die Abfrage (created_at bestätigen gleich zu ‚2012-03- 24') ich habe diesen Fehler:..

NoMethodError (undefined method `name' for "date(items.created_at)":Arel::Nodes::SqlLiteral): 

Überraschenderweise funktioniert es mit ‚größer als‘ und ‚kleiner als‘ nur ‚gleich‘ dieser Fehler tritt auf

ich dies alles gemacht für alle meine mo dels und 60% funktioniert (die verbleibenden 40% tritt dieser Fehler).

in der Konsole:

irb(main):232:0> Item.search(:created_at_eq => Date.today.to_s).result 
(Object doesn't support #inspect) 

Danke für Ihre Hilfe

EDIT:

Ich habe eine default_scope, die macht: Gegenstand (: deleted_at false)

Aber ich weiß nicht, warum es den Fehler auftritt

+0

Es sieht wie folgt aus wurde noch nicht gelöst: https://github.com/activerecord-hackery/ransack/issues/34 . Hast du jemals dein Problem herausgefunden? –

Antwort

1

Bitte ändert Arel::Nodes::SqlLiteral.new('date(column_name)') mit Arel.sql('date(column_name)').

Ihre Syntax wird ::

ransacker :created_at do 
    Arel.sql("date(items.created_at)") 
end 

ransacker :updated_at do 
    Arel.sql("date(items.updated_at)") 
end 

ransacker :deleted_at do 
    Arel.sql("date(items.deleted_at)") 
end 

ich hove dies hilfreich wäre.

1

ich damit einige Probleme hatte, und kam dies mit:

ransacker :created_at, type: :date do 
    Arel.sql('date(created_at)') 
end