Ruby on rails 使用值数组编写where语句的正确方法

Ruby on rails 使用值数组编写where语句的正确方法,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 4,Activerecord,我想不出在一行中为控制器编写where语句的正确方法 我错过了什么 @food_ranks = FoodRank.where("user_id = ? AND rank = ?", current_user.id, [0, 1, 2]) 这是我试图用三行来写的 @food_ranks = Array.new(FoodRank.where("user_id = #{current_user.id} AND rank = 0")) @food_ranks << FoodRank.whe

我想不出在一行中为控制器编写where语句的正确方法

我错过了什么

@food_ranks = FoodRank.where("user_id = ? AND rank = ?", current_user.id, [0, 1, 2])
这是我试图用三行来写的

@food_ranks = Array.new(FoodRank.where("user_id = #{current_user.id} AND rank = 0"))
@food_ranks << FoodRank.where("user_id = #{current_user.id} AND rank = 1")
@food_ranks << FoodRank.where("user_id = #{current_user.id} AND rank = 2")
是不是把食物列为where语句的字面意思?(未定义的方法)

请尝试以下方法:

@food_ranks = FoodRank.where("user_id = ? AND rank IN (?)", current_user.id, [0, 1, 2])
您还可以执行以下操作:

@food_ranks = FoodRank.where(user_id: current_user.id, rank: [0, 1, 2])

问题是您正在传入一个数组,并试图将秩与该数组进行比较

试着这样改变它:

FoodRank.where("user_id = ?", current_user.id, rank: [0, 1, 2])

Rails将从数组中自动生成SQL
IN
语句,因此无需指定该语句。

您不必在(?)中写入
排名,Rails将为您生成它。我认为,对于第一个查询,仍然需要这样做。对于第二个,你不需要这个。这就是为什么我没有在第二个查询中使用
,Rails会自动这样做。
FoodRank.where("user_id = ?", current_user.id, rank: [0, 1, 2])