2016-08-08 26 views
3

私のアプリで検索メカニズムにransack gemを使用しています。私が直面している問題は、私のモデルでは、私は誤って日付の検索が動作していないと私は日付に基づいて比較を行うことができないために文字列フィールドとして "日付"の列を作成しているということです。列のデータ型は文字列なので、ransackは適切な結果をもたらしません。Ransack検索文字列としての文字列

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

私はそのテーブルに数多くのライブデータを持っています。私は移行を書くことによってそれを危険にさらしたくありません。どんな助けもありがとう

答えて

1

それを使用して文字列をデータベースレベルでデータに変換できる簡単なハックがあります。 あなたのモデルには以下のメソッドを追加する必要があります。

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

さらなる支援が必要な場合はお知らせください。