前提・実現したいこと
検索機能を自分なりに試したく、ransackを使用しています。
現在numberカラムの範囲検索をでgteqとlteqを指定して検索したいです。
たとえば
1000 ~ 9999
と入力し、sql的には以下のように絞り込みたいです。
SELECT "searches".* FROM "searches" WHERE searches.number >= 1000 AND searches.number <= 9999;
発生している問題・エラーメッセージ
現在numberカラムのけgteqとlteqで以上以下の検索を行いたいのですが上手くいきません。
検索するとログに以下のSQL文が発行され、以上以下の値がとれません。
SELECT "searches".* FROM "searches" WHERE (CAST(searches.number AS CHAR(8)) >= '1000' AND CAST(searches.number AS CHAR(8)) <= '9999')
おそらく文字列で検索しているからだと思いますが、数字として検索をする場合はどうすればいいのかわかりません。
gemをインストール後にどこかのファイルで拡張する必要があるのでしょうか?
検索しているのですが、同じような症状が無かったため質問することにしました。
該当のソースコード
実装は以下になります。
index
1<%= search_form_for @q do |f| %> 2 <%= f.label :number_gteq %> 3 <%= f.number_field :number_gteq, class: "form-control" %> 4 <%= f.label :number_lteq, " ~ " %> 5 <%= f.number_field :number_lteq, class: "form-control" %> 6 <%= f.submit %> 7<% end %>
SearchesController
1class SearchesController < ApplicationController 2 3 def index 4 @q= Search.ransack(params[:q]) 5 @searches = @q.result 6 end 7end
schema
1create_table "searches", force: :cascade do |t| 2 t.integer "number" 3 t.datetime "created_at", precision: 6, null: false 4 t.datetime "updated_at", precision: 6, null: false 5 end
補足情報
DBはsqlite3を使用してます。
回答1件
あなたの回答
tips
プレビュー