我无法弄清楚在一行中为我的控制器写这个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语句吗? (未定义的方法)
答案 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>