2016-11-25 42 views
0

我查询我用下面的代码控制器的模型:Mongoid“其中”查询返回的结果而不是:: Mongoid条件(#未定义的方法<Mongoid ::标准)

@user_forecast = UserForecast.where(forecast_id: user_forecast_params[:forecast_id] , project_role_id: user_forecast_params[:project_role_id]) 

的模型是正确定义,参数存在。但是,不是返回UserForecast的一个实例,而是返回一个Mongoid :: Criteria的实例。

此行

logger.debug @user_forecast.id 

导致以下错误: `

NoMethodError (undefined method `id' for #<Mongoid::Criteria:0x00000004caa108>): 

我不知道发生了什么。

回答

0

这就是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) 
    ) 
    
+0

谢谢你!而已! – Boenne