mongoid“ where”查询返回的羊角::标准而不是结果(#< mongoid ::标准的未定义方法)



我正在使用以下代码查询控制器中的模型:

@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做同样的事情,解决方案是相同的:

  1. 使用first/last/...仅获取查询的一个结果:

    @user_forecast = UserForecast.where(...).first
    
  2. 更好,如果您期望只有一个:

    ,请使用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)
    )
    

最新更新