Ransack搜索日期为字符串

时间:2016-08-08 07:04:47

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 ransack

我在我的应用中使用ransack gem搜索机制。我面临的问题是,在我的模型中,我意外地创造了" date"列为字符串字段,因为日期搜索不起作用,我无法根据日期进行比较。由于列的数据类型是字符串,因此ransack不会带来适当的结果。

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

我在该表中有大量实时数据,我不想通过编写迁移来冒险。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

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

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")

如果您需要进一步的帮助,请与我们联系。