Datetime to date search #143

Closed
Epiju opened this Issue Sep 26, 2012 · 1 comment

Projects

None yet

2 participants

@Epiju
Epiju commented Sep 26, 2012

Hi,

I have in my model a datetime for created_at although I wanted the "equals" predicate to compare the created_at and a date (like '2012-09-26').

So I added in my model (in order to add casted attributes and take off the old 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

But when I confirm the query (created_at equals to '2012-03-24') I have this error:

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

Surprisingly, it works with "greater than" and "less than". Only "equals" occurs this error.

I made all of this for all my models and 60% works (the remain 40% occurs this error).

In the console :

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

Thanks for your help

EDIT :

I have a default_scope which makes :
Item(:deleted_at false)

But I don't know why it occurs the error

@jonatack
Member
jonatack commented Sep 5, 2014

The Ransackers section of the wiki explains how to do this.

@jonatack jonatack closed this Sep 5, 2014
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment