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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-02 23:23:02  来源:igfitidea点击:

Rails - Find By with 2 fields?

ruby-on-railsruby-on-rails-3

提问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])