質問するログイン新規登録

回答編集履歴

1

rails newから行う方法を追記

2018/07/26 11:39

投稿

takahashim
takahashim

スコア1877

answer CHANGED
@@ -1,4 +1,70 @@
1
1
  cisco Merakiはよく知らないのですが、Merakiダッシュボードに表示される(はずの)Validatorを、GETリクエストの際に返してやる必要があるようです。
2
2
  「Did not match validator」というメッセージの意味はそういうことだと思われます。
3
3
 
4
- 書かれているコードの場合、presenceapiメソッドの最後の`render :text => ''`の`''`を、空文字ではなくValidatorを文字列として記述するようにしてみるとよさそうです。
4
+ 書かれているコードの場合、presenceapiメソッドの最後の~~`render :text => ''`~~`render :plain => ''`の`''`を、空文字ではなくValidatorを文字列として記述するようにしてみるとよさそうです。
5
+ ※確かに別回答でasmさんが書かれてたように`render :plain`が正しそうですね。
6
+
7
+ ---
8
+
9
+ 初心者の方がいきなりいろいろやろうとすると難しそうなので、まずは単純にPOSTで送られてきたJSONデータを保存するところまでする、という想定で、イチから行うよう整理してみます。
10
+
11
+ rails newから始めると、だいたい以下のような流れになるかと思います。
12
+
13
+ ```shell
14
+ rails new scanning-app
15
+ cd scanning-app
16
+ rails g scaffold Event data:text
17
+ rails db:migrate
18
+ ```
19
+
20
+ ここでscaffoldで作っているのは、dataというカラムにJSONのオブジェクトのうち、data:というキーの値を全部テキストとして保存する、という想定です。リクエストを受け取るURLが/eventsだそうなので、モデルはEvent、コントローラーはEventsControllerにしています。
21
+
22
+ こんな感じで用意して、app/controller/events_controller.rbは、
23
+
24
+ ```ruby
25
+ class EventsController < ApplicationController
26
+ skip_before_action :verify_authenticity_token
27
+
28
+ VALIDATOR = "xxxxx"
29
+
30
+ def index
31
+ render :plain => VALIDATOR
32
+ end
33
+
34
+
35
+ def create
36
+ @event = Event.new(data: params[:data].to_s)
37
+
38
+ if @event.save
39
+ render :plain => "OK"
40
+ else
41
+ render :plain => "NG"
42
+ end
43
+ end
44
+ end
45
+ ```
46
+
47
+ みたいにします。VALIDATORは正しい値を入れてください。
48
+
49
+ ローカルで確認する場合は、
50
+
51
+ ```shell
52
+ rails server
53
+ ```
54
+
55
+ でサーバを立てると、http://localhost:3000/で立ち上がるはずです。
56
+ これで、curlを使って(curlがなければインストールしておいてください)、
57
+
58
+ ```shell
59
+ curl http://localhost:3000/events
60
+ ```
61
+
62
+ とすると、VALIDATORの文字列が帰ってくるはずです。同様に、POSTについては、
63
+
64
+ ```shell
65
+ curl -X POST -H "Content-Type: application/json" -d '{"secret":"xxxx","version":"2.0","type":"DevicesSeen","data":{"a":"bbb"}}' http://localhost:3001/events
66
+ ```
67
+
68
+ みたいな感じで適当にJSONを作ってPOSTリクエストを行ってみると、data:の値が保存されることが開発環境で確認できるかと思います。
69
+
70
+ これをproductionのサーバに持っていって、動作するのを確認したあとで、それからsecretの値チェックとか、data:の値をさらに項目ごとに分けてDBに保存するようにする、といったことを試してみるとよいかと思います。