2016-11-25 2 views
0

J'Interrogation d'un modèle dans mon contrôleur avec le code suivant:MongoId « où » requête retour MongoId :: critères au lieu de résultat (méthode non définie pour <# MongoId :: Critères)

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

Le modèle est défini correctement, les paramètres sont présents. Toutefois, au lieu de renvoyer une instance de UserForecast, il renvoie une instance de Mongoid :: Criteria.

Cette ligne

logger.debug @user_forecast.id 

résultats dans l'erreur suivante: `

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

Je n'ai aucune idée de ce qui se passe.

Répondre

0

C'est ce que fait le where de Mongoid: il construit une requête représentée comme un objet Mongoid::Criteria. ActiveRecord fait la même chose et les solutions sont les mêmes:

  1. Utilisez first/last/... pour attraper un seul résultat de la requête:

    @user_forecast = UserForecast.where(...).first 
    
  2. Mieux, utilisez find_by pour trouver exactement un si vous attendez qu'il y ait un seul:

    @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

Remerciez toi! C'est tout! – Boenne