多対多のモデルを使っています。
検索において
tags_id => 1とtags_id => 3を指定した際に該当しているはずの項目が表示できない。
_検索.html.erb
<%= f.label :tags_id, "タグ" %> <%= f.collection_check_boxes :tags_id_eq_all, @tags, :id, :name %>
school.controller.rb
def search_params # params.require(:q).permit! params.require(:q).permit(:category_id_eq) params.require(:q).permit(:name_cont) params.require(:q).permit(:tags_id_eq_all => []) end
モデル
school
category_id id name address その他もろもろ
category
id name
tag
id name
タグ以外にも名前検索、カテゴリ検索があります。
tags_id 1 AND tags_id 3
で検索をすると
ログには
SELECT "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)
となっており、多分AND検索にはなっている
該当の項目がないので表示できていないのかなと思っています。
ちなみに
rails console
School.find(4) ↓ #<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時">
と出ており(これが本来該当するはずの項目)、tags_idがないのが原因なのかと思ったのですが、
School.find(4).tagsとrails consoleでうつと
#<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">]>
と出たので、該当するはずの項目にtags_idは保持出来ているようでした。
:tags_id_in
で検索をかけていた時は
tags_id 1 と tags_id3 どちらか含む項目は検索できていたので関係ないのではと思っています。
どのようにすればチェックしたものに全て該当する項目が表示できますか?
教えていただきたいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。