虽然我有id 13163(db.locations.find({_id: 13163})
)的记录,但它给了我错误:
Mongoid :: Errors :: DocumentNotFound#show
问题:找不到ID为13163的类位置的文档。 简介:使用id或id数组调用Location.find时 参数必须与数据库中的文档匹配,否则将出现此错误 提高。搜索的是id(s):13163 ...(总共1个)和 未找到以下ID:13163。解决方案:搜索ID 在数据库中或设置Mongoid.raise_not_found_error 配置选项为false,这将导致返回nil 而不是在搜索单个ID时引发此错误,或仅 搜索倍数时匹配的文档。
# Use callbacks to share common setup or constraints between actions.
def set_location
@location = Location.find(params[:id])
end
locations_controller.rb:
class LocationsController < ApplicationController
before_action :set_location, only: [:show, :edit, :update, :destroy]
# GET /locations
# GET /locations.json
def index
@locations = Location.all
end
# GET /locations/1
# GET /locations/1.json
def show
end
private
# Use callbacks to share common setup or constraints between actions.
def set_location
@location = Location.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def location_params
params.require(:location).permit(:loc_name_en, :loc_name_jp, :channel)
end
end
设置选项raise_not_found_error: false
并非如此,因为我在数据库中有文档。
SOLUTION:
非常感谢@mu is too short给我一个提示。
问题可以通过两种方式解决:
field :_id, type: Integer
location.rb
Location.find(params[:id].to_i)
中的locations_controller.rb
整数,如下所示 @mu太短的答案答案 0 :(得分:3)
我猜你有类型问题。你这么说:
db.locations.find({_id: 13163})
在MongoDB shell中查找文档。这意味着您在locations
集合中有一个文档,其_id
是数字 13163
。如果您使用字符串'13163
&#39;:
db.locations.find({_id: '13163'})
您无法找到您的文档。 params[:id]
中的值可能是一个字符串,因此您要说:
Location.find('13163')
当你想说:
Location.find(13163)
如果_id
确实是一个号码,那么您需要确保使用号码拨打find
:
Location.find(params[:id].to_i)
你可能会感到困惑,因为有时Mongoid会在String
和Moped::BSON::ObjectId
之间进行转换(有时它会赢得),所以如果你的_id
是通常的ObjectId你可以说:
Model.find('5016cd8b30f1b95cb300004d')
和Mongoid会将该字符串转换为ObjectId。 Mongoid不会为您将String
转换为数字,您必须自己做。