Rails 3 使用 activerecord 将外键与 id 列表进行比较



我有两个模型之间的关系,寄存器和竞赛。我有一个非常复杂的动态查询正在构建中,如果条件合适,我需要将注册记录限制为仅那些符合特定标准的竞赛父记录。为了在不从比赛表中进行选择的情况下做到这一点,我在想一些类似的事情......

Register.where("competition_id in ?", Competition.where("...").collect {|i| i.id})

生成此 SQL:

SELECT "registers".* FROM "registers" WHERE (competition_id in 1,2,3,4...)

我不认为PostgreSQL喜欢in参数没有括号包围的事实。如何将注册外键与竞争 ID 列表进行比较?

您可以使其更短一点并跳过集合(这在 3.2.3 中对我有用)。

Register.where(competition_id: Competition.where("..."))

这将产生以下 SQL:

SELECT "registers".* FROM "registers" WHERE "registers"."competition_id" IN (SELECT "competitions"."id" FROM "competitions" WHERE "...")

试试这个:

competitions = Competition.where("...").collect {|i| i.id}
Register.where(:competition_id => competitions)

相关内容

  • 没有找到相关文章

最新更新