2012-09-26 17 views
5

Come il carvil ho nel mio modello un datetime per created_at sebbene volessi che il predicato "uguali" confronti il ​​created_at e una data (come '2012-09-26').Ruby on Railsack Data ricerca data/ora fino a data

così ho aggiunto nel mio modello (al fine di aggiungere attributi colato e togliere il vecchio created_at/update_at/deleted_at:

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 

Ma quando confermo la query (created_at è uguale a '2012-03- 24') ho questo errore:..

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

Sorprendentemente, funziona con 'maggiore' e 'minore di' Solo 'è uguale a' si verifica questo errore

ho fatto tutto questo per tutta la mia momento dels e il 60% funziona (il restante 40% si verifica questo errore).

Nella console:

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

Grazie per il vostro aiuto

EDIT:

Ho un default_scope che fa: Prodotto (: deleted_at false)

Ma non so perché si verifica l'errore

+0

Sembra che questo non è stato ancora risolto: https://github.com/activerecord-hackery/ransack/issues/34 . Hai mai capito il tuo problema? –

risposta

1

Per favore cambia Arel::Nodes::SqlLiteral.new('date(column_name)') con Arel.sql('date(column_name)').

la sintassi sarà ::

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 

ho Hove questo sarebbe utile.

1

ho avuto alcuni problemi con questo, e venne con questo:

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