2016-11-25 11 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

 Смежные вопросы

  • Нет связанных вопросов^_^