使用值数组写where语句的正确方法

时间:2016-04-20 04:59:02

标签: 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])

这是我尝试用3行写的。

@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")

@food_ranks正确显示这样的对象。为什么现在不让我这样做呢?

 @food_rank each do |rank|
   rank.user_id
 end

它是@food_ranks字面上的where语句吗? (未定义的方法)

2 个答案:

答案 0 :(得分:5)

尝试这种方式:

@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])

答案 1 :(得分:1)

问题是你传入一个数组,并试图将等级与那个进行比较。

尝试改变它:

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

Rails会自动从数组中生成SQL IN语句,因此无需指定。{/ p>