質問編集履歴
1
内容の修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
rails ransackを使って検索機能を作成したい
|
1
|
+
rails ransackを使ってradioボタンの検索機能を作成したい
|
test
CHANGED
@@ -1,48 +1,38 @@
|
|
1
1
|
# ransackを使って検索機能を作成したい
|
2
2
|
|
3
|
-
ransackという検索系のgemを使って検索フォームを実装した
|
3
|
+
ransackという検索系のgemを使って検索フォームを実装したのだが、
|
4
|
+
|
5
|
+
以下のラジオボタンでの検索を実装したかった。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
## 例
|
10
|
+
|
11
|
+
・0円
|
12
|
+
|
13
|
+
・1000円以下
|
14
|
+
|
15
|
+
・5000円以下
|
16
|
+
|
17
|
+
・10000以上
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
このような条件でradioボタンでの検索をしたい。
|
4
22
|
|
5
23
|
|
6
24
|
|
7
25
|
## コード
|
8
26
|
|
9
|
-
t
|
27
|
+
controller
|
10
28
|
|
11
29
|
```
|
12
30
|
|
13
|
-
articleテーブル
|
14
|
-
|
15
|
-
name
|
16
|
-
|
17
|
-
text
|
18
|
-
|
19
|
-
title
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
tagテーブル
|
24
|
-
|
25
|
-
name
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
article_tagsテーブル
|
30
|
-
|
31
|
-
tag_id
|
32
|
-
|
33
|
-
article_id
|
34
|
-
|
35
|
-
```
|
36
|
-
|
37
|
-
controller(article)
|
38
|
-
|
39
|
-
```
|
40
|
-
|
41
|
-
class
|
31
|
+
class PriceController < ApplicationController
|
42
32
|
|
43
33
|
def index
|
44
34
|
|
45
|
-
@search =
|
35
|
+
@search = Price.ransack(params[:q])
|
46
36
|
|
47
37
|
@result = @search.result(distinct: true)
|
48
38
|
|
@@ -52,26 +42,98 @@
|
|
52
42
|
|
53
43
|
|
54
44
|
|
45
|
+
slim
|
46
|
+
|
47
|
+
```
|
48
|
+
|
49
|
+
= search_form_for @search, url: search_index_path do |f|
|
50
|
+
|
51
|
+
div
|
52
|
+
|
53
|
+
= f.radio_button :price_eq, "", checked: true
|
54
|
+
|
55
|
+
| 0円
|
56
|
+
|
57
|
+
div
|
58
|
+
|
59
|
+
= f.radio_button :price_eq, ""
|
60
|
+
|
55
|
-
|
61
|
+
| 1000円以下
|
62
|
+
|
63
|
+
div
|
64
|
+
|
65
|
+
= f.radio_button :price_eq, ""
|
66
|
+
|
67
|
+
| 5000円以下
|
68
|
+
|
69
|
+
div
|
70
|
+
|
71
|
+
= f.radio_button :price_eq, ""
|
72
|
+
|
73
|
+
| 10000円以上
|
74
|
+
|
75
|
+
```
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
このコードでエラーなく表示まではできる。
|
80
|
+
|
81
|
+
が、これだと検索が効かない
|
82
|
+
|
83
|
+
|
56
84
|
|
57
85
|
slim
|
58
86
|
|
59
87
|
```
|
60
88
|
|
61
|
-
|
89
|
+
= search_form_for @search, url: search_index_path do |f|
|
62
90
|
|
63
|
-
|
91
|
+
div
|
64
92
|
|
93
|
+
= f.radio_button :price_eq, 0, checked: true
|
94
|
+
|
95
|
+
| 0円
|
96
|
+
|
97
|
+
div
|
98
|
+
|
65
|
-
|
99
|
+
= f.radio_button :price_lteq, 1000
|
100
|
+
|
101
|
+
| 1000円以下
|
102
|
+
|
103
|
+
div
|
104
|
+
|
105
|
+
= f.radio_button :price_lteq, 5000
|
106
|
+
|
107
|
+
| 5000円以下
|
108
|
+
|
109
|
+
div
|
110
|
+
|
111
|
+
= f.radio_button :price_gteq, 10000
|
112
|
+
|
113
|
+
| 10000円以上
|
66
114
|
|
67
115
|
```
|
68
116
|
|
69
|
-
このようにして検索はかけられた。
|
70
117
|
|
118
|
+
|
71
|
-
|
119
|
+
こうすればそれぞれの条件にあった書き方ができてるので
|
120
|
+
|
121
|
+
検索も効く。
|
122
|
+
|
123
|
+
と思ったのですが、
|
124
|
+
|
125
|
+
:price_eq,:price_lteq,:price_gteqと全て違うものを設定しているため
|
126
|
+
|
127
|
+
この値がradioボタンのname属性に付与されているせいで
|
128
|
+
|
129
|
+
それぞれのradioボタンが同じグループと認識されない。
|
130
|
+
|
131
|
+
そのため以下のように複数選択される形になってしまう。
|
72
132
|
|
73
133
|
|
74
134
|
|
75
|
-
c
|
135
|
+
![イメージ説明](f98c1988c0bac395c0c1fc2cfc9d1df6.png)
|
76
136
|
|
137
|
+
|
138
|
+
|
77
|
-
|
139
|
+
どうすればこの条件を変えずにできますでしょうか?
|