質問編集履歴
10
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -88,6 +88,18 @@
|
|
88
88
|
|
89
89
|
|
90
90
|
|
91
|
+
# aの中身を一部抜粋
|
92
|
+
|
93
|
+
# a = [{"70:DD:23"=>"{\"uid\":\"6729661\",\"email\":\"orenge@gmail.com\"}"},
|
94
|
+
|
95
|
+
# {"70:E7:AA"=>"{\"uid\":\"3014134\"}"},
|
96
|
+
|
97
|
+
# {"00:18"=>"{\"uid\":\"1040\"}"},
|
98
|
+
|
99
|
+
# ,,,,,{"DD:23:32"=>"{\"email\":\"apple@docomo.ne.jp\"}"}]
|
100
|
+
|
101
|
+
|
102
|
+
|
91
103
|
|
92
104
|
|
93
105
|
irb(main):009:0> new_data = a.each_with_object(Hash.new{|h, k|h[k] = Hash.new}){|it, memo|
|
9
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -72,6 +72,24 @@
|
|
72
72
|
|
73
73
|
```ruby
|
74
74
|
|
75
|
+
a = Array.new
|
76
|
+
|
77
|
+
sample = PersonalLog.all
|
78
|
+
|
79
|
+
sample.find_each do |x|
|
80
|
+
|
81
|
+
hash = Hash.new
|
82
|
+
|
83
|
+
hash[x.macaddr] = x.decrypted_data
|
84
|
+
|
85
|
+
a.push(hash)
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
75
93
|
irb(main):009:0> new_data = a.each_with_object(Hash.new{|h, k|h[k] = Hash.new}){|it, memo|
|
76
94
|
|
77
95
|
irb(main):010:1* it.each{|mac, val|
|
8
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -63,3 +63,41 @@
|
|
63
63
|
rails:5.2.0
|
64
64
|
|
65
65
|
ruby:2.5.1
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
###回答を受けて追記
|
70
|
+
|
71
|
+
回答のコードをrails console上で実行したところ下記エラーになってしました、、、
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
|
75
|
+
irb(main):009:0> new_data = a.each_with_object(Hash.new{|h, k|h[k] = Hash.new}){|it, memo|
|
76
|
+
|
77
|
+
irb(main):010:1* it.each{|mac, val|
|
78
|
+
|
79
|
+
irb(main):011:2* memo[mac].merge!(val){|_,s,o| s + ',' + o}
|
80
|
+
|
81
|
+
irb(main):012:2> }
|
82
|
+
|
83
|
+
irb(main):013:1> }
|
84
|
+
|
85
|
+
Traceback (most recent call last):
|
86
|
+
|
87
|
+
7: from (irb):9
|
88
|
+
|
89
|
+
6: from (irb):9:in `each_with_object'
|
90
|
+
|
91
|
+
5: from (irb):9:in `each'
|
92
|
+
|
93
|
+
4: from (irb):10:in `block in irb_binding'
|
94
|
+
|
95
|
+
3: from (irb):10:in `each'
|
96
|
+
|
97
|
+
2: from (irb):11:in `block (2 levels) in irb_binding'
|
98
|
+
|
99
|
+
1: from (irb):11:in `merge!'
|
100
|
+
|
101
|
+
TypeError (no implicit conversion of String into Hash)
|
102
|
+
|
103
|
+
```
|
7
修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
Railsでテーブルのカラム値をユニークかつマージしたい
|
test
CHANGED
@@ -1,32 +1,22 @@
|
|
1
|
-
personal_logsテーブル
|
1
|
+
personal_logsテーブルの"macaddr"カラムにMACアドレスが格納、"data"カラムに個人情報がハッシュとして格納されています
|
2
2
|
|
3
|
-
|
3
|
+
dataカラムには下記のような形の値が格納されております
|
4
|
+
|
5
|
+
{"uid":"xxxxxx","email":"xxx@xxx","phone":"xxx-xxxx-xxxx"}
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
ここで問題があり、"macaddr"カラムと"data"カラムには一部重複したものもあります
|
4
10
|
|
5
11
|
そこでユニークかつマージされたものにしたいです
|
6
12
|
|
7
13
|
|
8
14
|
|
9
|
-
そこで私がまずしようとしたことはMACアドレスをKey、dataをValuにしたハッシュの配列を作ろうとしました
|
10
|
-
|
11
|
-
```ruby
|
12
|
-
|
13
|
-
sample = PersonalLog.all
|
14
|
-
|
15
|
-
sample.each do |x|
|
16
|
-
|
17
|
-
h.[x.macaddr]=x.data
|
18
|
-
|
19
|
-
a.push(h)
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
```
|
24
|
-
|
25
|
-
上記で下記の配列ができると思っていましたが、指摘されてこれではエラーが出るようです
|
26
15
|
|
27
16
|
|
17
|
+
MACアドレスがKey、dataがValuになっているハッシュに格納されている配列を下記のようなものにしたとします
|
28
18
|
|
29
|
-
|
19
|
+
(ただし、下記は指摘をうけ、正しくない形となっています)
|
30
20
|
|
31
21
|
|
32
22
|
|
@@ -66,7 +56,7 @@
|
|
66
56
|
|
67
57
|
|
68
58
|
|
69
|
-
|
59
|
+
結果的に、私は上記のようなユニークかつマージされた形にしたく思っています
|
70
60
|
|
71
61
|
|
72
62
|
|
6
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -67,3 +67,9 @@
|
|
67
67
|
|
68
68
|
|
69
69
|
ともかく、私は上記のような形にしたく思っています
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
rails:5.2.0
|
74
|
+
|
75
|
+
ruby:2.5.1
|
5
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,3 +1,31 @@
|
|
1
|
+
personal_logsテーブルに"macaddr"カラムにMACアドレスが格納、"data"カラムに個人情報がハッシュとして格納されています
|
2
|
+
|
3
|
+
ただ、ここには一部重複したものもあります
|
4
|
+
|
5
|
+
そこでユニークかつマージされたものにしたいです
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
そこで私がまずしようとしたことはMACアドレスをKey、dataをValuにしたハッシュの配列を作ろうとしました
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
|
13
|
+
sample = PersonalLog.all
|
14
|
+
|
15
|
+
sample.each do |x|
|
16
|
+
|
17
|
+
h.[x.macaddr]=x.data
|
18
|
+
|
19
|
+
a.push(h)
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
```
|
24
|
+
|
25
|
+
上記で下記の配列ができると思っていましたが、指摘されてこれではエラーが出るようです
|
26
|
+
|
27
|
+
|
28
|
+
|
1
29
|
MACアドレスがKey、dataがValuになっているハッシュが格納されている配列が下記のようになっています
|
2
30
|
|
3
31
|
|
@@ -35,3 +63,7 @@
|
|
35
63
|
........."":"{}"}]
|
36
64
|
|
37
65
|
```
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
ともかく、私は上記のような形にしたく思っています
|
4
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,15 +4,15 @@
|
|
4
4
|
|
5
5
|
```ruby
|
6
6
|
|
7
|
-
[{"32:5A:3D:87:21:AA"
|
7
|
+
[{"32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas","email":"apple@gmail.com"}",
|
8
8
|
|
9
|
-
"32:5A:3D:87:21:AA"
|
9
|
+
"32:5A:3D:87:21:AA" =>"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
|
10
10
|
|
11
|
-
"32:5A:3D:87:21:AA"
|
11
|
+
"32:5A:3D:87:21:AA" =>"{"email":"bunana@gmail.com","phone":"080-4345-xx23"}",
|
12
12
|
|
13
|
-
"43:76:4A:DD:2C:BB"
|
13
|
+
"43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"090-4649-77xx"}",
|
14
14
|
|
15
|
-
"43:76:4A:DD:2C:BB"
|
15
|
+
"43:76:4A:DD:2C:BB" =>"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
|
16
16
|
|
17
17
|
........."":"{}"}]
|
18
18
|
|
@@ -28,9 +28,9 @@
|
|
28
28
|
|
29
29
|
```
|
30
30
|
|
31
|
-
[{"32:5A:3D:87:21:AA"
|
31
|
+
[{"32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
|
32
32
|
|
33
|
-
"43:76:4A:DD:2C:BB"
|
33
|
+
"43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
|
34
34
|
|
35
35
|
........."":"{}"}]
|
36
36
|
|
3
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
```ruby
|
6
6
|
|
7
|
-
["32:5A:3D:87:21:AA" :"{"uid":"dfasdfas","email":"apple@gmail.com"}",
|
7
|
+
[{"32:5A:3D:87:21:AA" :"{"uid":"dfasdfas","email":"apple@gmail.com"}",
|
8
8
|
|
9
9
|
"32:5A:3D:87:21:AA" :"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
|
10
10
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
"43:76:4A:DD:2C:BB" :"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
|
16
16
|
|
17
|
-
........."":"{}"]
|
17
|
+
........."":"{}"}]
|
18
18
|
|
19
19
|
```
|
20
20
|
|
@@ -28,10 +28,10 @@
|
|
28
28
|
|
29
29
|
```
|
30
30
|
|
31
|
-
["32:5A:3D:87:21:AA" :"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
|
31
|
+
[{"32:5A:3D:87:21:AA" :"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
|
32
32
|
|
33
33
|
"43:76:4A:DD:2C:BB" :"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
|
34
34
|
|
35
|
-
........."":"{}"]
|
35
|
+
........."":"{}"}]
|
36
36
|
|
37
37
|
```
|
2
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,17 +4,17 @@
|
|
4
4
|
|
5
5
|
```ruby
|
6
6
|
|
7
|
-
["32:5A:3D:87:21:AA"
|
7
|
+
["32:5A:3D:87:21:AA" :"{"uid":"dfasdfas","email":"apple@gmail.com"}",
|
8
8
|
|
9
|
-
"32:5A:3D:87:21:AA"
|
9
|
+
"32:5A:3D:87:21:AA" :"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
|
10
10
|
|
11
|
-
"32:5A:3D:87:21:AA"
|
11
|
+
"32:5A:3D:87:21:AA" :"{"email":"bunana@gmail.com","phone":"080-4345-xx23"}",
|
12
12
|
|
13
|
-
"43:76:4A:DD:2C:BB"
|
13
|
+
"43:76:4A:DD:2C:BB" :"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"090-4649-77xx"}",
|
14
14
|
|
15
|
-
"43:76:4A:DD:2C:BB"
|
15
|
+
"43:76:4A:DD:2C:BB" :"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
|
16
16
|
|
17
|
-
.........""
|
17
|
+
........."":"{}"]
|
18
18
|
|
19
19
|
```
|
20
20
|
|
@@ -28,10 +28,10 @@
|
|
28
28
|
|
29
29
|
```
|
30
30
|
|
31
|
-
["32:5A:3D:87:21:AA"
|
31
|
+
["32:5A:3D:87:21:AA" :"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
|
32
32
|
|
33
|
-
"43:76:4A:DD:2C:BB"
|
33
|
+
"43:76:4A:DD:2C:BB" :"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
|
34
34
|
|
35
|
-
.........""
|
35
|
+
........."":"{}"]
|
36
36
|
|
37
37
|
```
|
1
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -8,11 +8,11 @@
|
|
8
8
|
|
9
9
|
"32:5A:3D:87:21:AA" =>"{"uid":"kdjfasdf","email":"apple@gmail.com"}",
|
10
10
|
|
11
|
-
"32:5A:3D:87:21:AA" =>"{"email":"bunana@gmail.com","phone":"
|
11
|
+
"32:5A:3D:87:21:AA" =>"{"email":"bunana@gmail.com","phone":"080-4345-xx23"}",
|
12
12
|
|
13
|
-
"43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"
|
13
|
+
"43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com","phone":"090-4649-77xx"}",
|
14
14
|
|
15
|
-
"43:76:4A:DD:2C:BB" =>"{"phone":"
|
15
|
+
"43:76:4A:DD:2C:BB" =>"{"phone":"090-4649-77xx","email":"remon@gamil.com"}",
|
16
16
|
|
17
17
|
.........""=>"{}"]
|
18
18
|
|
@@ -21,3 +21,17 @@
|
|
21
21
|
dataにはKeyとして'uid''email''phone'が入っています
|
22
22
|
|
23
23
|
上記の配列で、MACアドレスがユニーク、dataがユニークかつマージされた配列に変更したいです。
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
下記のような形にしたいです
|
28
|
+
|
29
|
+
```
|
30
|
+
|
31
|
+
["32:5A:3D:87:21:AA" =>"{"uid":"dfasdfas,kdjfasdf","email":"apple@gmail.com,bunana@gmail.com","phone":"080-4345-xx23"}",
|
32
|
+
|
33
|
+
"43:76:4A:DD:2C:BB" =>"{"uid":"dfjaskdi","email":"orenge@gamil.com,remon@gmail.com","phone":"090-4649-77xx"}",
|
34
|
+
|
35
|
+
.........""=>"{}"]
|
36
|
+
|
37
|
+
```
|