【问题标题】:Rails 3 Comparing foreign key to list of ids using activerecordRails 3使用activerecord将外键与ID列表进行比较
【发布时间】:2012-06-25 00:20:21
【问题描述】:

我在两个模型之间有关系,RegistersCompetitions。我有一个非常复杂的动态查询正在构建中,如果条件合适,我需要将注册记录限制为仅竞争父级满足特定条件的那些。为了做到这一点而无需从竞争表中进行选择,我正在考虑类似...

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 列表进行比较?

【问题讨论】:

    标签: ruby-on-rails arrays postgresql in-clause


    【解决方案1】:

    你可以缩短一点并跳过收集(这在 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 "...")
    

    【讨论】:

    • 我喜欢简洁的代码,我想这就是我的答案。
    【解决方案2】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2017-06-21
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多