14

我正在使用三个数据库的表构建一个 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

4 回答 4

14

使用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)

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

于 2013-12-26T03:43:52.323 回答
5

find_by_user_idfor user_idcolumn 类似,您可以组合多个列名并获得动态查找器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])
于 2013-12-26T03:42:32.183 回答
2

Like.find_by_user_id(params[:user_id])- 此语法在ActiveRecord 4中已弃用。

而是尝试使用whereActiveRecord 查询接口的方法来传递数组条件。例子:

Like.where("user_id = ? AND post_id = ?", params[:user_id], params[:post_id])
于 2013-12-26T03:47:05.170 回答
1

如果您期望一条记录成为结果:

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

如果您期望结果不止一条记录:

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

于 2015-06-12T10:43:42.627 回答