【问题标题】:Ruby on Rails filter out with constraintsRuby on Rails 使用约束过滤掉
【发布时间】:2017-03-13 19:53:53
【问题描述】:

假设我有两个模型,一个是用户,一个是故事。两个模型之间都有 has_and_belongs_to_many 关系。一个用户可以有很多故事,而一个故事可以有很多用户。

由于你们中的大多数人已经了解,在两者之间存在一个连接表,“users_stories”,它的列是“user_id”和“story_id”。

问题是“如何获取没有故事的用户?”。任何有效的方式将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    试试这个:

    User.joins('left join user_stories ON users.id = user_stories.user_id').where('user_stories.user_id is NULL')
    

    更多细节可以看这张图:

    https://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg

    【讨论】:

      【解决方案2】:

      您可以使用连接查询在模型上设置范围以检查大于零的商店计数

      without_stories_user = User.joins(users_stories: :story).group('users.id').having("count(stories.id) > ?",0)
      

      对我来说,这是没有通知的用户,具有类似的 has_many 并且属于关联。

      without_notifications_user = User.joins(user_notifications: :notification).group('users.id').having("count(notifications.id) > ?",0)
      

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 2015-04-09
        • 1970-01-01
        • 2014-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多