Rails – 查找2个字段?

我有一个控制器中的以下内容

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

但是我希望它也可以通过另一个参数project_idfind

我如何在Rails中做这样的事情?

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

是的,你可以通过一些方法来find答案。

您的示例如下所示:

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

– 注意你的例子有两个user_id

在rails 2.x中,你也可以使用条件

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

而在Rails 3中,你可以像下面这样酷:

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

Rails 4引入了find_by方法:

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

尝试这个:

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

Rails 3与范围的方式:

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

然后你可以像这样使用它:

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