Ruby Gem ActiveRecord查找具有多个条件的方法

时间:2013-12-26 03:38:15

标签: ruby-on-rails ruby activerecord gem sinatra-activerecord

我正在使用三个数据库表构建Sinatra应用程序:userpostlike

我想运行一个查询,它会在like表中找到一个条目,如下所示:

FIND in like WHERE user_id == params[:user_id] AND post_id == params[:post_id]

(对于我将使用的一个条件:Like.find_by_user_id(params[:user_id])

我的问题是:

如何使用ActiveRecord Gem运行具有多个条件的查找查询?

4 个答案:

答案 0 :(得分:11)

使用where

Like.where('user_id = ? AND post_id = ?', params[:user_id], params[:post_id])

Like.where('user_id = :user_id AND post_id = :post_id', params)

重要的是要记住,需要将其中的参数转换为预期类型,例如params[:post_id].to_i

答案 1 :(得分:4)

find_by_user_id列的user_id类似,您可以组合多个列名称并获取动态查找器find_by_user_id_and_post_id

Like.find_by_user_id_and_post_id(params[:user_id], params[:post_id])

如果find_by_查找器中的列数超过“可承受”,您可以使用where并按如下方式提供条件:

Like.where(user_id: params[:user_id], post_id: params[:post_id])

答案 2 :(得分:2)

Like.find_by_user_id(params[:user_id]) - ActiveRecord 4中不推荐使用此语法。

而是尝试使用ActiveRecord查询接口的where方法来传递array conditions。例如:

Like.where("user_id = ? AND post_id = ?", params[:user_id], params[:post_id])

答案 3 :(得分:1)

如果您希望结果是一条记录:

要替换find_by_whatever,您可以使用find_by(whatever),例如User.find_by(username:"UsernameIsMyUsername",password:"Mypassword")。如果只有一条记录符合您的搜索范围,则应使用find_by

如果您希望结果有多条记录:

如果您预期不止一个,则应使用where where(username:"MyUsername",password:"Password")。这将返回数组中的所有结果记录。