APIアプリケーションであるMongodbを使ってRailsバックエンドを構築しようとしています。私は、イベントモデルとAPIのコントローラを持っていると私はlocalhostに行くとき:3000 /イベント/ 2、私はレコードが私のデータベース内にある知っているが、私は、404エラーを取得しています:Mongodbを使ってRailsでAPIエンドポイントを打つことができない
は{ "_id" : 2, "name" : "String Cheese", "location" : "Durham, NC", "price" : "40.00" }
私のコントローラは、このようになります:
require 'api_constraints'
Rails.application.routes.draw do
namespace :api, defaults: { format: :json }, path: '/' do
scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
resources :users, only: [:show]
resources :events, only: [:show]
end
end
end
をそして私はこのようになります私のlibフォルダ内api_constraints.rbを持っている:
class API::V1::EventsController < ApplicationController
respond_to :json
def show
respond_with Event.find('_id')
end
private
def event_params
params.require(:event).permit(:name, :url, :location, :dates, :price, :info, :genre, :address, :city, :tags)
end
end
そして、私のルートは次のようになり
class ApiConstraints
def initialize(options)
@version = options[:version]
@default = options[:default]
end
def matches?(req)
@default || req.headers['Accept'].include?("application/vnd.marketplace.v#{@version}")
end
end
これは、uriにapiバージョン番号を持つ必要性を排除するためです。それが私のエンドポイントに影響しているかどうかはわかりません。
私は自分のサーバーを起動してlocalhost:3000/events/2
に行くときそれでは、私は404エラーを取得:
{ "ステータス":404、 "エラー": "Not Found" や "例外": "#1の\ u003cMongoid: :エラー:DocumentNotFound:\ nmessage:\ nクラスEventのIDが見つかりません(\ "_ id \" = \ u003e \ "2 \")。\ nサマリー:\ nイベントを呼び出すとき。 idまたはIDの配列で検索すると、各パラメータはデータベース内のドキュメントと一致する必要があります。このエラーは発生します:id:s:\ u003e \ "2 \"}
スタックトレースは実際にはさらに長くなるため、誰かが必要な場合は全部を投稿できます。
ご協力いただければ幸いです。
MongoidはデフォルトでIDを 'BSON :: ObjectId'として保存します。文字列ではありません。 https://docs.mongodb.com/ruby-driver/master/tutorials/6.0.0/mongoid-documents/ – max