Search code examples
ruby-on-railsrubypostgresqlruby-on-rails-4ransack

Ransack Search Date as a String


I am using ransack gem for search mechanism in my app. The problem i m facing is that in my model i have accidently created the "date" column as string field due to which Date search isn't working and i m not able to do the comparison on the basis of date. Since the data type of column is string so ransack do not bring appropriate results.

@q = MyModel.order(id: :desc).ransack(params[:q])
@records = @q.result(distinct: true)

I have tons of live data in that Table and i don't want to risk it by writing a migration. Any help will be appreciated


Solution

  • There is a simple hack you can use it and convert the string into data at the database level. Your model you need to add below method.

    ransacker :name_of_your_column_to_d do
        Arel.sql("cda")
    end
    

    Then in your controller do the below changes.

    # You can use DESC id if you want to change order. 
    @q = YourModel.ransack({s: "id DESC"}.merge(params[:q] || {}))
    
    @q.result(distinct: true).select("*, to_date(\"your_model_table_name\".\"your_date_column_name\", 'MM/DD/YYYY') as cda, your_model_table_name.id")
    

    Let me know if you need further assistance.