Ruby on rails 以字符串形式搜索搜索日期

Ruby on rails 以字符串形式搜索搜索日期,ruby-on-rails,ruby,postgresql,ruby-on-rails-4,ransack,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 4,Ransack,我在我的应用程序中使用了搜索搜索机制。我面临的问题是,在我的模型中,我意外地创建了“日期”列作为字符串字段,因为日期搜索无法工作,并且我无法根据日期进行比较。因为列的数据类型是字符串,所以ransack不会带来适当的结果 @q = MyModel.order(id: :desc).ransack(params[:q]) @records = @q.result(distinct: true) 我在那个表中有大量的实时数据,我不想冒写迁移的风险。任何帮助都将不胜感激。有一个简单的技巧,您可以使用

我在我的应用程序中使用了搜索搜索机制。我面临的问题是,在我的模型中,我意外地创建了“日期”列作为字符串字段,因为日期搜索无法工作,并且我无法根据日期进行比较。因为列的数据类型是字符串,所以ransack不会带来适当的结果

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

我在那个表中有大量的实时数据,我不想冒写迁移的风险。任何帮助都将不胜感激。

有一个简单的技巧,您可以使用它并在数据库级别将字符串转换为数据。 您需要在下面的方法中添加您的模型

ransacker :name_of_your_column_to_d do
    Arel.sql("cda")
end
然后在控制器中执行以下更改

# 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")
如果你需要进一步的帮助,请告诉我