質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Ruby on Rails

    7265questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • API

    1524questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • JSON

    1152questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

  • Cisco

    92questions

    シスコ(Cisco Systems,Inc.)は、アメリカ合衆国に本社を置く、世界最大のコンピュータネットワーク機器開発会社及び同社の製品

  • GET

    88questions

    GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。

railsでRoutingErrorがでてしまいます

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 127

kozica

score 26

 前提・実現したいこと

Meraki ダッシュボードでScannig APIからPOSTs URLを追加するとRails側で下記エラーメッセージがでます。
merakiからはjsonでPOSTされています

$bundle exec rails s
で起動はうまくいきます

URL:wex01.cloud24.jp/personal_logs

ルーティングに問題がありそうですが、アプローチの仕方がわかりません

どうかお力を貸して頂きたいです。

 発生している問題・エラーメッセージ

ActionController::RoutingError (No route matches [GET] "/personal_log"):

 該当のソースコード

#app/controllers/personal_logs_controller.rb
MERAKI_VALIDATOR = 'xxxxxxxxxxxxxxxxxxxxxx'
MERAKI_SECRET = 'xxxxxxxxxxxx'


class PersonalLogsController < ApplicationController
  skip_before_action :verify_authenticity_token
  before_action :set_personal_log, only: [:show, :edit, :update, :destroy]

  def presenceapi
    if request.post?
      map = JSON.parse(params[:data]).with_indifferent_access
      if map[:secret] == MERAKI_SECRET
        map[:probing].each do |p|
          Presence.create(ap_mac: p[:ap_mac], client_mac: p[:client_mac],
                          last_seen: DateTime.parse(p[:last_seen]),
                          rssi: p[:rssi])
        end
        render :text => '' and return
      else
        Rails::logger.warn("*** MERAKI req with bad secret '#{map[:secret]}'")
        rails 'access denied'
      end
    else
      render :text => MERAKI_VALIDATOR
    end
  end
end
#config/routes.rb
Rails.application.routes.draw do
  get 'personal_logs', :to => 'personal_logs#presenceapi', :as => :personal_logs
end

 補足情報(FW/ツールのバージョンなど)

ディストリビューション
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID=""
ID_LIKE=""
VERSION_ID=""
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2018.03

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

No route matches [GET] "/personal_log"

ということは、/personal_logにアクセスがきてるので
ダッシュボード側のURL設定が/personal_logsになってるかを確認

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/25 18:52

    それで解決できました。
    しかし、今度はrails側でエラーは出ないんですが、ダッシュボードのほうで下記エラー表示が出てしまいます。
    Did not match validator: http://wex01.cloud24.jp/personal_logs
    これを見るとvalidatorが合致してないようです。
    railsでjsonを取得の仕方がそもそも間違ってるような気がするんですがどうでしょうか?

    キャンセル

  • 2018/07/25 19:11

    getじゃなくてmatchですね これ
    (個人的にはget/postで別アクションにしたいですけど)

    キャンセル

  • 2018/07/25 19:13

    matchに変更してrails server起動すると下記エラーがでました
    You should not use the `match` method in your router without specifying an HTTP method. (ArgumentError)
    If you want to expose your action to both GET and POST, add `via: [:get, :post]` option.
    If you want to expose your action to GET, use `get` in the router:
    Instead of: match "controller#action"
    Do: get "controller#action"

    キャンセル

  • 2018/07/25 23:09

    match 'personal_logs', :to => 'personal_logs#presenceapi', :as => :personal_logs, :via => [:get, :post]
    です

    キャンセル

  • 2018/07/26 09:37

    routes.rbを上記で書き換えましたら、routingerrorはなくなりました
    丁寧にありがとうございました。

    次なる問題に差し掛かってしまって、また質問投稿しておりますので宜しかったら覗いていってください。
    https://teratail.com/questions/137809#reply-208710

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails

    7265questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • API

    1524questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • JSON

    1152questions

    JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

  • Cisco

    92questions

    シスコ(Cisco Systems,Inc.)は、アメリカ合衆国に本社を置く、世界最大のコンピュータネットワーク機器開発会社及び同社の製品

  • GET

    88questions

    GETとはHTTPが対応するリクエストメソッドの一つです。クライアントからサーバーへ送られたURLパラメータのデータを取得する時必要がある時に使われます。