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

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

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

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

Q&A

解決済

1回答

1997閲覧

activehashの一列目をinclude_blankに適用したい

teruan7110

総合スコア5

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/26 13:09

編集2020/08/26 13:14

前提・実現したいこと

今回ransackを用いて商品検索の検索フォームを作成しているのですが
今回active hashで検索フォームを作っています
shadow_serch.html.erbの記述の中で
include_blank: '指定なし'と現在してますが
このinclude_blankする箇所をcategory.rbの { id: 1, name: '--' }の部分に適用したいのですがどうしてもできません
ちなみにcategory.rbの中身は変えることができません
変えずに行いたいです

該当のソースコード

shadow_serch.html.erb

Rails

1 2<h1>商品検索</h1> 3<%= search_form_for @p, url: items_search_path do |f| %> 4 <%= f.label :category_id_eq, 'カテゴリー' %> 5 <%= f.collection_select :category_id_eq, Category.all, :id, :name, include_blank: '指定なし' %> 6 <br> 7 <%= f.label :status_id_eq, '商品の状態' %> 8 <%= f.collection_select :status_id_eq, Status.all, :id, :name, include_blank: '指定なし' %> 9 <br> 10 <%= f.label :delivery_burden_id_eq, '配送料の負担' %> 11 <%= f.collection_select :delivery_burden_id_eq, DeliveryBurden.all, :id, :name, include_blank: '指定なし' %> 12 <br> 13 <%= f.label :arrival_day_eq, '発送までの日数' %> 14 <%= f.collection_select :arrival_day_id_eq, ArrivalDay.all, :id, :name, include_blank: '指定なし' %> 15 <br> 16 <%= f.submit '検索' %> 17<% end %>

category.rb

Rails

1class Category < ActiveHash::Base 2 self.data = [ 3 { id: 1, name: '--' }, 4 { id: 2, name: 'レディース' }, 5 { id: 3, name: 'メンズ' }, 6 { id: 4, name: 'ベビー・キッズ' }, 7 { id: 5, name: 'インテリア・住まい・小物' }, 8 { id: 6, name: '本・音楽・ゲーム' }, 9 { id: 7, name: 'おもちゃ・ホビー・グッズ' }, 10 { id: 8, name: '家電・スマホ・カメラ' }, 11 { id: 9, name: 'スポーツ・レジャー' }, 12 { id: 10, name: 'ハンドメイド' }, 13 { id: 11, name: 'その他' } 14 ] 15end

試したこと

f.collection_selectの第二引数である
Category.allを.allではなく.findで一列目以外を持ってくればと考えましたがエラーが出てしまい
include_blank: 変数名.categry.name
などいろいろ試してみましたがどうしてもたどり着けませんでした
まだまだ勉学が浅くご教授いただけますと幸いにございます

補足情報(FW/ツールのバージョンなど)

rubyバージョン 6.0.0

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

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

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

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

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

winterboum

2020/08/26 23:57

「include_blankする箇所をcategory.rbの { id: 1, name: '--' }の部分に適用したい」 とは どうしたいのでしょう。 どうなってしまうのでしょう。 今の状態だとおそらく、 セレクタ-には「指定なし」と表示され、選ぼうとすると 指定なし、--,レディース,メンズ,,,, が表示される。 だとおもいます。 で、「指定なし」を選んだ時の検索結果、「--」を選んだ時の検索結果がどうなってしまうのが、どうなってほしいのか
teruan7110

2020/08/27 00:26 編集

返信ありがとうございます! 申し訳ありません肝心なところが抜けておりました 現在の状態ですと「--」も検索対象に入ってしまって「--」に該当する商品まで検索してしまいます ですがvalidatesでactivehashであるcategory_idにnumericality: { other_than: 1 }の制限をかけてますので商品出品時category.rbの三行目の{ id: 1, name: '--' }つまり「--」は選択できないようにしています。 なので必然的に「--」を選んでしまうと絶対に検索しても商品は存在しませんと出てしまいます include_blank: '指定なし'を行うと検索の選択に指定なしが入り指定なしを選択すると検索において何も条件を指定してない状態になります 上記でも記述しましたが現在は「--」を選択すると「--」の値と合致した商品を持ってきてしまいます これを「--」を選んでも何も条件を指定していない状態にしたいです。 ただしinclude_blank: '--'で「--」を付け加えるのではなく{ id: 1, name: '--' }の部分を条件を指定してない状態にしたいです
guest

回答1

0

自己解決

無事解決できました!!
activehashのcategoryからwhereメソッドを用いて category.rbの三行目の{ id: 1, name: '--' }以外の配列を取得してやる形にしてあげることで「--」を排除することができました
これでinclude_blank: '--'によって「--」を選んでも何も条件を指定していない形となりました

items_controller

rails

1(省略) 2 3 def search_item 4 @p =Item.ransack(params[:q]) 5 @category = Category.where.not(id: 1) #この記述でid: 1を持ってるやつ以外を指定 6 @status = Status.where.not(id: 1) 7 @delivery_burden= DeliveryBurden.where.not(id: 1) 8 @arrival_day= ArrivalDay.where.not(id: 1) 9 end 10 11(省略)

shadow_search.html.erb

rails

1<%= search_form_for @p, url: items_search_path do |f| %> 2 <%= f.label :category_id_eq, 'カテゴリー' %> 3 <%= f.collection_select :category_id_eq, @category, :id, :name, include_blank: '--' %> 4 5(省略)

category.rb

rails

1class Category < ActiveHash::Base 2 self.data = [ 3 { id: 1, name: '--' }, 4 { id: 2, name: 'レディース' }, 5 { id: 3, name: 'メンズ' }, 6 { id: 4, name: 'ベビー・キッズ' }, 7 { id: 5, name: 'インテリア・住まい・小物' }, 8 { id: 6, name: '本・音楽・ゲーム' }, 9 { id: 7, name: 'おもちゃ・ホビー・グッズ' }, 10 { id: 8, name: '家電・スマホ・カメラ' }, 11 { id: 9, name: 'スポーツ・レジャー' }, 12 { id: 10, name: 'ハンドメイド' }, 13 { id: 11, name: 'その他' } 14 ] 15end

投稿2020/08/27 04:28

teruan7110

総合スコア5

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問