我的范围有什么问题

时间:2014-02-21 17:03:09

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

我正在写一个有效的记录范围。我有以下sql:

SELECT user.roll_number, first_name, last_name FROM user 
  INNER JOIN classes ON user.roll_number = classes.roll_number
    AND classes.id IN #{id} ORDER BY(roll_number)

我在用户类中编写了作用域,基本上这些表都在db2数据库中,所以我编写了如下所示的作用域

scope :by_id, lambda { |id|
  { select("user.roll_number, first_name, last_name")
      .joins("INNER JOIN classes ON (user.roll_number = classes.roll_number \
        and classes.id = #{id})")
  }
}

范围有问题吗?我收到“意外的关键字结束错误”

1 个答案:

答案 0 :(得分:1)

如评论中所述,您需要删除{}个大括号。我猜你看到的错误是因为:

{ select("...") }

被解释为哈希的实例化,密钥为select("...")且没有值。 Ruby对你不满意。

您的后续行动:

  

如果我传递多个ID怎么办?我得到空列表,即使有id 1和id 2的记录。我在数组形式中传递id为id = [1,2]

你创建了一个SQL lambda,所以你可以使SQL工作。 [1,2]的列表将如下所示:

INNER JOIN classes ON (user.roll_number = classes.roll_number
  and classes.id = [1,2])

这会在你的SQL DB上运行吗?你不想使用and classes.id IN (1,2)吗?