我正在使用以下代码查询控制器中的模型:
@user_forecast = UserForecast.where(forecast_id: user_forecast_params[:forecast_id] , project_role_id: user_forecast_params[:project_role_id])
该模型定义正确,存在参数。但是,它没有返回用户forecast的实例,而是返回mongoid :: Criteria的实例。
这条线
logger.debug @user_forecast.id
导致以下错误:
NoMethodError (undefined method `id' for #<Mongoid::Criteria:0x00000004caa108>):
我不知道发生了什么。
这就是mongoid的 where
所做的:它构建以Mongoid::Criteria
对象表示的查询。ActivereCord做同样的事情,解决方案是相同的:
-
使用
first
/last
/...仅获取查询的一个结果:@user_forecast = UserForecast.where(...).first
-
更好,如果您期望只有一个:
,请使用find_by
确切找到一个@user_forecast = UserForecast.find_by( forecast_id: user_forecast_params[:forecast_id], project_role_id: user_forecast_params[:project_role_id] ) @user_forecast = UserForecast.find_by( user_forecast_params.slice(:forcecast_id, :project_role_id) )