我在我的应用中使用ransack gem搜索机制。我面临的问题是,在我的模型中,我意外地创造了" date"列为字符串字段,因为日期搜索不起作用,我无法根据日期进行比较。由于列的数据类型是字符串,因此ransack不会带来适当的结果。
@q = MyModel.order(id: :desc).ransack(params[:q])
@records = @q.result(distinct: true)
我在该表中有大量实时数据,我不想通过编写迁移来冒险。任何帮助将不胜感激
答案 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")
如果您需要进一步的帮助,请与我们联系。