2016-11-25 6 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 개체로 표현 된 쿼리를 작성하는 것입니다. 액티브는 같은 일을하고 솔루션은 동일합니다

  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