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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

1805閲覧

rails ransackを使ってradioボタンの検索機能を作成したい

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2018/11/14 05:15

編集2018/11/15 06:29

ransackを使って検索機能を作成したい

ransackという検索系のgemを使って検索フォームを実装したのだが、
以下のラジオボタンでの検索を実装したかった。

・0円
・1000円以下
・5000円以下
・10000以上

このような条件でradioボタンでの検索をしたい。

コード

controller

class PriceController < ApplicationController def index @search = Price.ransack(params[:q]) @result = @search.result(distinct: true) end

slim

= search_form_for @search, url: search_index_path do |f| div = f.radio_button :price_eq, "", checked: true | 0円 div = f.radio_button :price_eq, "" | 1000円以下 div = f.radio_button :price_eq, "" | 5000円以下 div = f.radio_button :price_eq, "" | 10000円以上

このコードでエラーなく表示まではできる。
が、これだと検索が効かない

slim

= search_form_for @search, url: search_index_path do |f| div = f.radio_button :price_eq, 0, checked: true | 0円 div = f.radio_button :price_lteq, 1000 | 1000円以下 div = f.radio_button :price_lteq, 5000 | 5000円以下 div = f.radio_button :price_gteq, 10000 | 10000円以上

こうすればそれぞれの条件にあった書き方ができてるので
検索も効く。
と思ったのですが、
:price_eq,:price_lteq,:price_gteqと全て違うものを設定しているため
この値がradioボタンのname属性に付与されているせいで
それぞれのradioボタンが同じグループと認識されない。
そのため以下のように複数選択される形になってしまう。

イメージ説明

どうすればこの条件を変えずにできますでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

ビュー側ではradio_button_tagに変更し、name属性を同じにします

slim

1= search_form_for @search, url: search_index_path do |f| 2 div 3 = radio_button_tag :price, 1, checked: true 4 | 0円 5 div 6 = radio_button_tag :price, 2 7 | 1000円以下 8 div 9 = radio_button_tag :price, 3 10 | 5000円以下 11 div 12 = radio_button_tag :price, 4 13 | 10000円以上

コントローラ側でラジオボタンの値を見て、適宜条件を設定することが可能です

ruby

1def index 2 params[:q] = { price_eq: 0 } if params[:price] == 1 3 params[:q] = { price_lteq: 1000 } if params[:price] == 2 4 params[:q] = { price_lteq: 5000 } if params[:price] == 3 5 params[:q] = { price_gteq: 10000 } if params[:price] == 4 6 @search = Price.ransack(params[:q]) 7 @result = @search.result(distinct: true) 8end

ざっと書いてみたので、間違っているかもしれませんが、
参考になれば幸いです。

投稿2018/11/16 04:40

編集2018/11/16 05:44
lolohacker

総合スコア31

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

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

退会済みユーザー

退会済みユーザー

2018/11/16 06:54

ありがとうございます!解決しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問