Q&A
:status_type というデータを持つPostモデルの検索フォームを実装しています。
コントローラーは以下で、
Ruby
1#posts_controller.rb 2 3class PostsController < ApplicationController 4 5 def index 6 @q = Post.order(:id).ransack(params[:q]) 7 @posts = @q.result 8 end 9 10end
ビューは次のようになっています。
Ruby
1#index.html.erb 2<%= search_form_for @q , url: "nail" do |f| %> 3 <%= f.check_box :status_type_cont, {multiple: true},checked_value = "状態A", nil %> 4 <%= f.check_box :status_type_cont, {multiple: true},checked_value = "状態B", nil %> 5 <%= f.check_box :status_type_cont, {multiple: true},checked_value = "状態C", nil %> 6 <%= f.submit %> 7<% end %>
表示はうまく行っているのですが、この状態ではデータを思うように取得できませんでした。
ログを確認したところ、
SELECT "posts".* FROM "posts" WHERE ("posts"."status_type" ILIKE '%["状態A", "状態B"]%')
と表示されており、どうやらstatus_typeが配列で渡されてしまっているために検索がうまくいかないようです。
{multiple: true}
を外した状態で”状態A”をチェックし、送信すると、
SELECT "posts".* FROM "posts" WHERE ("posts"."status_type" ILIKE '%nail%')
となり、うまくデータを取得でき、検索結果がきちんと表示されています。
そこで、{multiple: true}が設定された状態で取得した配列を分解し、それぞれの値をand条件で結んで検索をするように実装したいです。
もしくは、{multiple:true}以外で複数選択の検索が出来ればそちらでも大丈夫です。
どなたかお知恵をお貸しくださいm(__)m
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2015/07/29 10:00