【问题标题】:Rails get associations on conditionRails 有条件地获得关联
【发布时间】:2018-01-24 14:01:02
【问题描述】:

我有一个问题 - 我不知道如何仅在满足条件时获取关联记录。

我有帖子模型和评论,帖子has_many :comments,评论belongs_to :post

现在,我想检索所有帖子,但仅限于特定的 cmets(假设 user_id = 1)。 我怎样才能做到这一点? 查询喜欢

Post.includes(:comments).where("comments.user_id = ?", "1") 只会检索一些帖子,我想要所有帖子,但仅限于 user_id 等于 1 的 cmets。

我想我应该使用某种 LEFT JOIN,也许像

posts.joins("LEFT JOIN comments ON posts.id comments.post_id")

但我不确定如何放置限制右表结果的条件。

【问题讨论】:

  • will retrieve only some Posts 是什么意思?你没有得到任何你期望得到的结果?
  • 如果您想要帖子中包含 id 为 1 的用户的 cmets,上述查询应该可以工作。除非你期待其他回应。你能告诉我们你得到的回应吗?
  • 正如我所说,我想要所有帖子,但不要加载所有帖子 cmets,只加载满足条件的 cmets。

标签: ruby-on-rails ruby activerecord relational-database


【解决方案1】:

可以如下实现

Post.includes(:comments).where("comments.user_id = ?", "1").references(:comments)

欲了解更多信息,请转到here

【讨论】:

  • 好吧 - 我没有收到没有任何 cmets 的帖子 - 任何想法如何解决这个问题?
  • 你可以试试这个,我不确定这是否有效 "Post.includes(:cmets).where("cmets.user_id = ? or cmets.id is null", "1") .references(:cmets)"
  • 嗯,这对我来说是个坏例子(我简化了给定的例子,实际上子句包含外键以外的其他值)。在这里翻译我使用了includes(:comments).where('comments.user_id IS NULL OR (comments.message = ?', message).references(:comments)。多亏了这一点,我得到了所有的帖子(即使是没有评论的帖子),而 cmets 仅限于包含指定消息的帖子。
  • 太好了,终于找到了解决办法。
猜你喜欢
  • 2011-03-26
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多