回答編集履歴

1

rails newから行う方法を追記

2018/07/26 11:39

投稿

takahashim
takahashim

スコア1877

test CHANGED
@@ -4,4 +4,136 @@
4
4
 
5
5
 
6
6
 
7
- 書かれているコードの場合、presenceapiメソッドの最後の`render :text => ''`の`''`を、空文字ではなくValidatorを文字列として記述するようにしてみるとよさそうです。
7
+ 書かれているコードの場合、presenceapiメソッドの最後の~~`render :text => ''`~~`render :plain => ''`の`''`を、空文字ではなくValidatorを文字列として記述するようにしてみるとよさそうです。
8
+
9
+ ※確かに別回答でasmさんが書かれてたように`render :plain`が正しそうですね。
10
+
11
+
12
+
13
+ ---
14
+
15
+
16
+
17
+ 初心者の方がいきなりいろいろやろうとすると難しそうなので、まずは単純にPOSTで送られてきたJSONデータを保存するところまでする、という想定で、イチから行うよう整理してみます。
18
+
19
+
20
+
21
+ rails newから始めると、だいたい以下のような流れになるかと思います。
22
+
23
+
24
+
25
+ ```shell
26
+
27
+ rails new scanning-app
28
+
29
+ cd scanning-app
30
+
31
+ rails g scaffold Event data:text
32
+
33
+ rails db:migrate
34
+
35
+ ```
36
+
37
+
38
+
39
+ ここでscaffoldで作っているのは、dataというカラムにJSONのオブジェクトのうち、data:というキーの値を全部テキストとして保存する、という想定です。リクエストを受け取るURLが/eventsだそうなので、モデルはEvent、コントローラーはEventsControllerにしています。
40
+
41
+
42
+
43
+ こんな感じで用意して、app/controller/events_controller.rbは、
44
+
45
+
46
+
47
+ ```ruby
48
+
49
+ class EventsController < ApplicationController
50
+
51
+ skip_before_action :verify_authenticity_token
52
+
53
+
54
+
55
+ VALIDATOR = "xxxxx"
56
+
57
+
58
+
59
+ def index
60
+
61
+ render :plain => VALIDATOR
62
+
63
+ end
64
+
65
+
66
+
67
+
68
+
69
+ def create
70
+
71
+ @event = Event.new(data: params[:data].to_s)
72
+
73
+
74
+
75
+ if @event.save
76
+
77
+ render :plain => "OK"
78
+
79
+ else
80
+
81
+ render :plain => "NG"
82
+
83
+ end
84
+
85
+ end
86
+
87
+ end
88
+
89
+ ```
90
+
91
+
92
+
93
+ みたいにします。VALIDATORは正しい値を入れてください。
94
+
95
+
96
+
97
+ ローカルで確認する場合は、
98
+
99
+
100
+
101
+ ```shell
102
+
103
+ rails server
104
+
105
+ ```
106
+
107
+
108
+
109
+ でサーバを立てると、http://localhost:3000/で立ち上がるはずです。
110
+
111
+ これで、curlを使って(curlがなければインストールしておいてください)、
112
+
113
+
114
+
115
+ ```shell
116
+
117
+ curl http://localhost:3000/events
118
+
119
+ ```
120
+
121
+
122
+
123
+ とすると、VALIDATORの文字列が帰ってくるはずです。同様に、POSTについては、
124
+
125
+
126
+
127
+ ```shell
128
+
129
+ curl -X POST -H "Content-Type: application/json" -d '{"secret":"xxxx","version":"2.0","type":"DevicesSeen","data":{"a":"bbb"}}' http://localhost:3001/events
130
+
131
+ ```
132
+
133
+
134
+
135
+ みたいな感じで適当にJSONを作ってPOSTリクエストを行ってみると、data:の値が保存されることが開発環境で確認できるかと思います。
136
+
137
+
138
+
139
+ これをproductionのサーバに持っていって、動作するのを確認したあとで、それからsecretの値チェックとか、data:の値をさらに項目ごとに分けてDBに保存するようにする、といったことを試してみるとよいかと思います。