複数のフィールドでフィルタリングしようとしています。フィールドはENUMリストから取得され、チェックボックスフィールドに入れられ、次に配列に保存されます。 {"status" => ["active"、 "past_due"]}のように、フィルタリングしようとしているもののGETリクエストは次のようになります。私は選択された値でフィルタリングするクエリのスコープを持っています。私は問題がモデルにあると仮定しています。INクエリがフィルタリングしない - Ruby on Rails 4
モデル:
scope :subscription_status, -> (statuses) {where :subscription_status => statuses}
コントローラ:
@users = User.where(nil)
@users = @users.subscription_status(params[:statuses]) if params[:statuses].present?
ビュー(html.haml):
= form_tag root_path, :method => 'get' do
- @subscription_statuses.each do |status|
= check_box_tag 'statuses[]', status
= status
= submit_tag "Filter", :name => nil
@subscription_statusesは、ENUMリストを含んでいます。
他のフィルタも同じ原理で動作しますが、このフィルタは機能していないようです。ページがリロードされ、GETパラメータが送信されますが、フィルタリングはありません。
ありがとうございます。 :)
EDIT:
@subscription_statuses = User.subscription_statuses.keys
これは、文字列の配列であり、データベース内の値を文字列として保存されます。
あなたはPLS出力.to_sql' ...例えば 'でコールをsufixingことで、あなたのコードによって生成されたSQLクエリすることができます。 :User.where(id:[1,2,3])。to_sql' – equivalent8
あなたの質問が正しいかどうか分かりませんが、これは私が生成したものです:User.where(:subscription_status => ["trialing "、" past_due "]))to_sql " SELECT 'users'。* FROM' users' WHERE 'users'.subscription_status' IN(0、0)"。あなたは正しいです、ここに問題がありますが、私はなぜそれがこのように変換するのか分かりません。クエリに「ステータス」の代わりに[1,2]を入れようとすると、値が文字列として保存されるため、何も表示されません。 –