Ruby-on-rails Rails - 用 2 个字段查找?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/3936621/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Rails - Find By with 2 fields?
提问by AnApprentice
I have the following in a controller
我在控制器中有以下内容
def update
@permission = Permission.find_by_user_id(params[:user_id])
But I want it to also find by another param, project_id
但我希望它也能通过另一个参数找到, project_id
How can I do something like this in Rails?
我怎样才能在 Rails 中做这样的事情?
@permission = Permission.find_by_user_id_and_project_id(params[:user_id],params[:user_id])
回答by Fred Willmore
Rails 4 introduces the find_by method:
Rails 4 引入了 find_by 方法:
Permission.find_by(user_id: params[:user_id], project_id: params[:project_id])
回答by Jesse Wolgamott
Yes, you can do finds in a bunch of ways.
是的,您可以通过多种方式进行查找。
Your example below works:
您下面的示例有效:
@permission = Permission.find_by_user_id_and_project_id(params[:user_id],params[:project_id])
@permission = Permission.find_by_user_id_and_project_id(params[:user_id],params[:project_id])
-- Note your example had two user_ids
-- 注意你的例子有两个 user_ids
In rails 2.x you can also use conditions
在 rails 2.x 中,您还可以使用条件
@permission = Permission.find(:conditions=>["user_id=? and project_id=?", params[:user_id], params[:project_id]])
And in Rails 3, you can be cool like:
在 Rails 3 中,你可以很酷:
@permission = Permission.where(:user_id=>params[:user_id]).where(:project_id=>params[:project_id]).first
回答by Jacob Relkin
Try this:
尝试这个:
@permission = Permission.find(:conditions => ['user_id = ? and project_id = ?', params[:user_id], params[:project_id]])
回答by DGM
Rails 3 way with scopes:
带作用域的 Rails 3 方式:
scope :by_user_id_and_project_id, lambda {|user_id,project_id|
where(:user_id=>user_id).where(:project_id=>project_id])
}
And then you can use it like:
然后你可以像这样使用它:
@permission = Permission.by_user_id_and_project_id(params[:user_id],params[:project_id])

