タグ検索で複数選択できるようにしています。
全てに当てはまる教室を表示したいのですが、できません。
ransack使用
schools_controller.rb params.require(:q).permit(:tags_id_eq_all)
教室やカテゴリのparamsは省略しています。
フォーム.html.erb <%= search_form_for @q do |f| %> <%= f.label :name_cont, '教室' %> <%= f.search_field :name_cont %> <%= f.label :category_id %> <%= f.collection_select :category_id_eq, Category.all, :id, :name, :include_blank => '指定なし' %> <%= f.label :tags_id_eq_all, "タグ" %> <%= f.collection_check_boxes :tags_id_eq_all, @tags, :id, :name %> <%= f.submit "検索" %> <% end %>
urlに表示されるのは
schools?utf8=✓&q%5Bname_cont%5D=&q%5Bcategory_id_eq%5D=&q%5Btags_id_eq_all%5D%5B%5D=&q%5Btags_id_eq_all%5D%5B%5D=1&q%5Btags_id_eq_all%5D%5B%5D=3&commit=検索
となっており該当する教室も表示できていません。
こちら絞り込む方法はありませんか?
追記
上記で検索時のパラメーターはこちらです
{"utf8"=>"✓", "q"=>{"name_cont"=>"", "category_id_eq"=>"", "tags_id_eq_all"=>["", "1", "3"]}, "commit"=>"検索"}
sql
1SELECT "schools".* FROM "schools" LEFT OUTER JOIN "school_tags" ON "school_tags"."school_id" = "schools"."id" LEFT OUTER JOIN "tags" ON "tags"."id" = "school_tags"."tag_id" WHERE ("tags"."id" = 1 AND "tags"."id" = 3)
こちらでアンド検索はできているようでした。
ということは受け取る側の問題でしょうか。
名前とカテゴリー、タグ検索があり、タグのみ検索しています。
該当しているはずの項目はrails consoleで検索すると
School id: 4, category_id: 1, name: "ごり", address: "ワシントン", created_at: "2020-09-15 10:38:23", updated_at: "2020-09-15 10:38:23", hpaddress: "nvkd", tel: "090-9182-9128", time: "12時から18時">
となっていました。
カラムにtag_idがないから検索に引っかからないのでしょうか。
ですが、チェックボックスが3つあり1つしか選択していない時は表示できているので関係ないのかと思いましたが。
rails consoleで「School.find(4).tags」と打った結果
School Load (5.0ms) SELECT "schools".* FROM "schools" WHERE "schools"."id" = ? LIMIT ? [["id", 4], ["LIMIT", 1]] Tag Load (3.1ms) SELECT "tags".* FROM "tags" INNER JOIN "school_tags" ON "tags"."id" = "school_tags"."tag_id" WHERE "school_tags"."school_id" = ? LIMIT ? [["school_id", 4], ["LIMIT", 11]] => #<ActiveRecord::Associations::CollectionProxy [#<Tag id: 1, name: "成犬OK", created_at: "2020-09-10 11:21:01", updated_at: "2020-09-10 11:21:01">, #<Tag id: 3, name: "予約必須", created_at: "2020-09-10 11:21:12", updated_at: "2020-09-10 11:21:12">]>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/18 11:15
2020/09/18 11:55
2020/09/19 06:07
2020/09/19 09:26
2020/09/19 09:38
2020/09/19 12:46
2020/09/19 13:01
2020/09/19 13:03
2020/09/19 22:53 編集