質問編集履歴
4
完成下の
test
CHANGED
File without changes
|
test
CHANGED
@@ -147,3 +147,33 @@
|
|
147
147
|
times.has_key?("1")
|
148
148
|
|
149
149
|
こうすればできました。が、汎用性も、拡張性も悪いのでもっとスマートな書き方が知りたいです!
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
ーーーーーーーーーーー最後の追記
|
154
|
+
|
155
|
+
完成しました!みなさまありがとうございました!
|
156
|
+
|
157
|
+
最後の ArgumentError はご覧の通り時間の入っている params に空のハッシュがあるからです。これは別のメソッドを使って取り除いています。
|
158
|
+
|
159
|
+
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
|
163
|
+
pry(#<EventsController>)> time = Array(params[:user][:note][:datetime])
|
164
|
+
|
165
|
+
=> [<ActionController::Parameters {"(1i)"=>"2018", "(2i)"=>"3", "(3i)"=>"5", "(4i)"=>"03", "(5i)"=>"10"} permitted: false>,
|
166
|
+
|
167
|
+
<ActionController::Parameters {"(1i)"=>"", "(2i)"=>"", "(3i)"=>"", "(4i)"=>"", "(5i)"=>""} permitted: false>]
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
pry(#<EventsController>)> Array(params[:event][:invites][:datetime]).each {|t| p normalize_time t}
|
172
|
+
|
173
|
+
2018-03-05 03:10:00 +0900
|
174
|
+
|
175
|
+
ArgumentError: argument out of range
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
```
|
3
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -137,3 +137,13 @@
|
|
137
137
|
|
138
138
|
|
139
139
|
他の方は length とか size を使った例を教えてくださっているのですが、Parameters クラスには定義されてないようで使えないんです。
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
ーーーーーーーーーーさらに追記
|
144
|
+
|
145
|
+
pamrams に 0 とか 1 が自動で追記されることを利用して、
|
146
|
+
|
147
|
+
times.has_key?("1")
|
148
|
+
|
149
|
+
こうすればできました。が、汎用性も、拡張性も悪いのでもっとスマートな書き方が知りたいです!
|
2
コード追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -63,3 +63,77 @@
|
|
63
63
|
|
64
64
|
|
65
65
|
```
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
ーーーーーーーーーー追記
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
|
77
|
+
#日付を一つにした場合
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
[1] pry(#<UsersController>)> times.is_a?(Hash)
|
82
|
+
|
83
|
+
=> false
|
84
|
+
|
85
|
+
[2] pry(#<UsersController>)> times.class
|
86
|
+
|
87
|
+
=> ActionController::Parameters
|
88
|
+
|
89
|
+
[3] pry(#<UsersController>)> times
|
90
|
+
|
91
|
+
=> <ActionController::Parameters {"0"=>{"(1i)"=>"2017", "(2i)"=>"6", "(3i)"=>"2", "(4i)"=>"00", "(5i)"=>"00"}, "1"=>{"(1i)"=>"", "(2i)"=>"", "(3i)"=>"", "(4i)"=>"", "(5i)"=>""}} permitted: false>
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
#日付を2つにした場合
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
[5] pry(#<UsersController>)> times
|
108
|
+
|
109
|
+
=> <ActionController::Parameters {
|
110
|
+
|
111
|
+
"0"=>
|
112
|
+
|
113
|
+
{"(1i)"=>"2018", "(2i)"=>"2", "(3i)"=>"1", "(4i)"=>"02",(5i)"=>"00"},
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
"1"=>{"(1i)"=>"2018", "(2i)"=>"1", "(3i)"=>"7", "(4i)"=>"01", "(5i)"=>"20"}} permitted: false>
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
[6] pry(#<UsersController>)> times.class
|
122
|
+
|
123
|
+
=> ActionController::Parameters
|
124
|
+
|
125
|
+
[7] pry(#<UsersController>)> times.is_a?(Hash)
|
126
|
+
|
127
|
+
=> false
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
```
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
変わらないですねー。どちらも Parameters というクラスになってます。あと関係あるかどうかわかりませんが、僕がform をいじってしまっているのもあって、paramas の中のキーに 0 とか 1 が紛れ込んでいるんです。
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
他の方は length とか size を使った例を教えてくださっているのですが、Parameters クラスには定義されてないようで使えないんです。
|
1
コードの追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,3 +1,65 @@
|
|
1
1
|
入力欄が5つあるのですが、ユーザーは1つでも5つでも構わないという仕組みです。
|
2
2
|
|
3
3
|
複数の時は each を使い分解して処理し、1つの時はそのまま処理をしたいのですが、複数か1つかを見分ける方法がわからず困っています。どのようにしたら判別することができますか?
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
これが追記のコードです。if times.instance_of?(Array) の箇所をどうにかしたいです。
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
```
|
14
|
+
|
15
|
+
# instance_of?(Array) は必ず falseになってしまうため困っている
|
16
|
+
|
17
|
+
times = params[:user][:note][:datetime]
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
if times.instance_of?(Array)
|
22
|
+
|
23
|
+
times.each do |time|
|
24
|
+
|
25
|
+
if include_validate_time?(time)
|
26
|
+
|
27
|
+
@user.notes.create(user_id: user_id.to_i, datetime: normalize_time(time))
|
28
|
+
|
29
|
+
normalize_time(time)
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
else
|
36
|
+
|
37
|
+
if include_validate_time?(times["0"])
|
38
|
+
|
39
|
+
@user.notes.create(user_id: user_id.to_i, datetime: normalize_time(times["0"]))
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
# datetimeフィールドで送信すると変になるから一つにまとめるためのメソッド
|
46
|
+
|
47
|
+
def normalize_time(time)
|
48
|
+
|
49
|
+
y = time["(1i)"]
|
50
|
+
|
51
|
+
mo = time["(2i)"]
|
52
|
+
|
53
|
+
d = time["(3i)"]
|
54
|
+
|
55
|
+
h = time["(4i)"]
|
56
|
+
|
57
|
+
mi = time["(5i)"]
|
58
|
+
|
59
|
+
Time.new(y,mo,d,h,mi)
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
|
65
|
+
```
|