Rails – Trouver par avec 2 champs?

J’ai le suivant dans un contrôleur

def update @permission = Permission.find_by_user_id(params[:user_id]) 

Mais je veux aussi le trouver par un autre paramètre, project_id

Comment puis-je faire quelque chose comme ça dans Rails?

 @permission = Permission.find_by_user_id_and_project_id(params[:user_id],params[:user_id]) 

Rails 4 introduit la méthode find_by:

 Permission.find_by(user_id: params[:user_id], project_id: params[:project_id]) 

Oui, vous pouvez faire des recherches de plusieurs manières.

Votre exemple ci-dessous fonctionne:

@permission = Permission.find_by_user_id_and_project_id(params[:user_id],params[:project_id])

– Notez que votre exemple avait deux user_ids

Dans les rails 2.x, vous pouvez également utiliser des conditions

 @permission = Permission.find(:conditions=>["user_id=? and project_id=?", params[:user_id], params[:project_id]]) 

Et dans Rails 3, vous pouvez être cool comme:

 @permission = Permission.where(:user_id=>params[:user_id]).where(:project_id=>params[:project_id]).first 

Essaye ça:

 @permission = Permission.find(:conditions => ['user_id = ? and project_id = ?', params[:user_id], params[:project_id]]) 

Rails 3 voies avec scopes:

 scope :by_user_id_and_project_id, lambda {|user_id,project_id| where(:user_id=>user_id).where(:project_id=>project_id]) } 

Et puis vous pouvez l’utiliser comme:

 @permission = Permission.by_user_id_and_project_id(params[:user_id],params[:project_id])