2012-09-26 37 views
5

Me gusta carvil Tengo en mi modelo un datetime para created_at aunque quería el predicado "igual" para comparar el created_at y una fecha (como '2012-09-26').Ruby on Rails Ransack Fecha y hora de búsqueda

por lo que añade en mi modelo (con el fin de añadir atributos emitidos y quitar el viejo 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 

Pero cuando confirmo la consulta (created_at es igual a '2012-03- 24') tengo este error:..

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

manera sorprendente, se trabaja con 'mayor que' y 'menor que' sólo 'iguales' este error se produce

hice todo esto para toda mi mes dels y el 60% funciona (el 40% restante tiene este error).

En la consola:

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

Gracias por su ayuda

EDIT:

Tengo un default_scope lo que hace: Opción (: deleted_at falsa)

Pero no sé por qué ocurre el error

+0

Parece que esto no se ha resuelto todavía: https://github.com/activerecord-hackery/ransack/issues/34 . ¿Alguna vez entendiste tu problema? –

Respuesta

1

Por favor, cambie Arel::Nodes::SqlLiteral.new('date(column_name)') con Arel.sql('date(column_name)').

Su sintaxis será ::

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 

I Hove esto sería útil.

1

he tenido algunos problemas con este, y venía con esto:

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