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

Lio*_*rom 12 ruby gem activerecord ruby-on-rails sinatra-activerecord

我建设使用三个数据库的表一西纳特拉的应用程序:user,postlike.

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

FIND in like WHERE user_id == params[:user_id] AND post_id == params[:post_id]
Run Code Online (Sandbox Code Playgroud)

(对于一个条件,我会用:Like.find_by_user_id(params[:user_id]))

我的问题是:

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

fal*_*tru 12

用途where:

Like.where('user_id = ? AND post_id = ?', params[:user_id], params[:post_id])
Run Code Online (Sandbox Code Playgroud)

要么

Like.where('user_id = :user_id AND post_id = :post_id', params)
Run Code Online (Sandbox Code Playgroud)

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


vee*_*vee 5

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

Like.find_by_user_id_and_post_id(params[:user_id], params[:post_id])
Run Code Online (Sandbox Code Playgroud)

find_by_查找器中的列多于“可承受的”列时,可以使用where并提供以下条件:

Like.where(user_id: params[:user_id], post_id: params[:post_id])
Run Code Online (Sandbox Code Playgroud)