azz*_*z0r 6 ruby ruby-on-rails mongoid
*在底部更新*
在寻找不存在的用户时,我得到:
UsersController#show中的Mongoid :: Errors :: DocumentNotFound
问题:找不到具有id(s)22的类User的文档.摘要:当使用id或id数组调用User.find时,每个参数必须与数据库中的文档匹配,否则将引发此错误.搜索的是id(s):22 ...(总共1个)并且找不到以下ID:22.解决方案:搜索数据库中的id或将Mongoid.raise_not_found_error配置选项设置为false,这将导致返回nil而不是在搜索单个id时引发此错误,或者在搜索倍数时仅返回匹配的文档.
但是我将raise_not_found_error设置为false
mongoid.yml
development:
adapter: 'mongoid'
# Configure available database sessions. (required)
sessions:
# Defines the default session. (required)
default:
# Defines the name of the default database that Mongoid can connect to.
# (required).
database: blog_development
# Provides the hosts the default session can connect to. Must be an array
# of host:port pairs. (required)
hosts:
- localhost:27017
options:
allow_dynamic_fields: false
identity_map_enabled: true
include_root_in_json: true
include_type_for_serialization: true
# Note this can also be true if you want to preload everything, but this is
# almost never necessary. Most of the time set this to false.
preload_models:
- Canvas
- Browser
- Firefox
scope_overwrite_exception: true
raise_not_found_error: false
skip_version_check: false
use_activesupport_time_zone: false
use_utc: true
# Configure Mongoid specific options. (optional)
options:
# Enable the identity map, needed for eager loading. (default: false)
# identity_map_enabled: false
# Includes the root model name in json serialization. (default: false)
# include_root_in_json: false
# Include the _type field in serializaion. (default: false)
# include_type_for_serialization: false
# Preload all models in development, needed when models use
# inheritance. (default: false)
# preload_models: false
# Protect id and type from mass assignment. (default: true)
# protect_sensitive_fields: true
# Raise an error when performing a #find and the document is not found.
# (default: true)
raise_not_found_error: false
# Raise an error when defining a scope with the same name as an
# existing method. (default: false)
scope_overwrite_exception: false
# Skip the database version check, used when connecting to a db without
# admin access. (default: false)
# skip_version_check: false
# Use Active Support's time zone in conversions. (default: true)
# use_activesupport_time_zone: true
# Ensure all times are UTC in the app side. (default: false)
# use_utc: false
test:
sessions:
default:
database: blog_test
hosts:
- localhost:27017
options:
consistency: :strong
# In the test environment we lower the retries and retry interval to
# low amounts for fast failures.
max_retries: 1
retry_interval: 0
Run Code Online (Sandbox Code Playgroud)
调节器
# GET /users/1
# GET /users/1.json
def show
@user = User.find(params[:id])
render json: @user
end
Run Code Online (Sandbox Code Playgroud)
*UPDATE** 通过这样做修复了一个空响应(不是json格式):
def show
@user = User.find(params[:id])
if @user.nil?
@user = []
end
render json: @user
end
Run Code Online (Sandbox Code Playgroud)
okl*_*liv 16
你的yml结构是错误的
必须 -
development:
sessions:
options:
#raise_not_found_error has to be not here but see below
options: #strictly 2 spaces before
raise_not_found_error: false #strictly 4 spaces before not 6
Run Code Online (Sandbox Code Playgroud)
所以,raise_not_found_error参数必须是孩子development>options,而不是development>sessions>options
对我来说,即使正确的缩进也不起作用,在config/initializers /中创建一个名为mongoid.rb的初始化文件,并将其放入其中
Mongoid.raise_not_found_error = false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9950 次 |
| 最近记录: |