質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

271閲覧

Rails 多階層selectboxの検索を機能させたい

yupapapa

総合スコア24

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/12/13 11:34

Railsの、親子孫関係を実現するgemであるancestryを使用してCategory機能の実装しています。

そこで、検索フォームでcategory_idでの検索し絞り込みを行いたいのですが、うまくいきません。
カテゴリーはselectboxで動的に出現し、親子孫複数の値が存在するので、category_id: [] としてみたのですが、絞り込みが行われません。

検索機能部分

Post.rb

scope :search, -> (search_params) do return if search_params.blank? name_like(search_params[:name]) .category_like(search_params[:category_id]) end scope :name_like, -> (name) { if name.present? words = name.to_s.gsub(/(?:[[:space:]%_])+/, " ").split(" ") query = (['name collate utf8_unicode_ci LIKE ?'] * words.size).join(" AND ") where(query,*words.map{|w| "%#{w}%"}) end } scope :category_like, -> (category_id) { where(category_id: category_id) if category_id.present? }
def search @search_params = post_search_params @posts = Post.search(@search_params).order(sort) end private def post_search_params params.fetch(:search, {}).permit(:name,category_id: []) end
<%= form_with(scope: :search, url: search_posts_path, method: :get, local: true) do |f| %> <%= f.text_field :name, value: @search_params[:name], class: "search-text" %> <div class="product_select-details"> <div class="product_select-group"></div> <div class="product_category-select"> <%= f.collection_select :category_id, @category, :id, :name, { prompt: "---" }, { class: "category_select-box", id: "category_select" } %> <i class="fa fa-chevron-down"></i> </div> <div class="product_select-children"></div> </div> <%= f.submit '完了', class: "search-button" %> <% end %>
create_table "categories", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.string "name" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "ancestry" t.index ["ancestry"], name: "index_categories_on_ancestry" end create_table "posts", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.string "name" t.text "content" t.integer "price" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.string "image" t.string "status" t.integer "user_id" t.bigint "category_id", null: false t.index ["category_id"], name: "index_posts_on_category_id" end
"category_id"=>"481"}, "post"=>{"category_id"=>"559"}, "commit"=>"完了"}

ターミナル上ではちゃんとidが送られているのに、絞り込み検索が行われない原因は何ですか?
ご教授願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問