【问题标题】:Where Clause with Less/Greater than after a Join加入后小于/大于的 Where 子句
【发布时间】:2017-07-20 04:47:01
【问题描述】:

我正在尝试将 joinswhere 子句组合,但 where 子句不是测试相等,而是测试大于或等于。

我知道在标准的 where 子句中,我可以这样做:

Group.where("vote_deadline_at <= ?", Time.now)

查找投票截止日期在未来的所有组。

但是,如果这是在 joins 之后出现的,像这样:

User.likes.where(liked_type: "Post").joins("INNER JOIN posts ON posts.id = liked_id").where(posts: {context_type:"Group"}).joins("INNER JOIN groups ON groups.id = posts.context_id").where(groups: {"vote_deadline_at <= ?",Time.now})

直到最后的where(groups: {"vote_deadline_at &lt;= ?",Time.now}) 子句一切正常。它返回一个 186 行的 ActiveRecord 集合。但是,当我添加最后的 where 子句时,我得到了错误:

SyntaxError: unexpected '}', expecting end-of-input
...ote_deadline_at <= ?",Time.now})

有没有什么方法可以使用 where 子句进一步过滤我的结果,该子句仅选择 groups.vote_deadline_at 在未来(即小于或等于 Time.now)的行?

【问题讨论】:

    标签: ruby-on-rails ruby join activerecord where-clause


    【解决方案1】:

    我以为我以前尝试过,但显然这种语法有效:

    u.likes.where(liked_type: "Post").joins("INNER JOIN posts ON posts.id = liked_id").where(posts: {context_type:"Group"}).joins("INNER JOIN groups ON groups.id = posts.context_id").where("groups.vote_deadline_at <= ?",Time.now)
    

    我得到了我预期的结果。

    【讨论】:

      【解决方案2】:

      语法应该是: ... .where(groups: ["vote_deadline_at &lt;= ?",Time.now] )

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-30
        • 1970-01-01
        • 2012-07-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-23
        • 2011-10-03
        相关资源
        最近更新 更多