我正在使用三个数据库表构建Sinatra应用程序:user
,post
和like
。
我想运行一个查询,它会在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运行具有多个条件的查找查询?
答案 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")
。这将返回数组中的所有结果记录。