【问题标题】:Correct way to write where statement with array of values使用值数组编写 where 语句的正确方法
【发布时间】:2016-04-20 04:59:02
【问题描述】:

我想不出在一行中为我的控制器编写此 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 语句吗? (未定义的方法)

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 activerecord


    【解决方案1】:

    试试这个方法:

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

    【讨论】:

    • 你不必写rank IN (?)为最上面的,Rails会为你生成。
    • 我认为,对于第一个查询,这仍然是必要的。对于第二个,你不需要那个。这就是为什么我没有在第二个查询中使用IN,Rails 会自动这样做。
    【解决方案2】:

    问题是您正在传递一个数组,并试图将排名与该数组进行比较。

    尝试像这样改变它:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-29
      相关资源
      最近更新 更多