【发布时间】:2015-08-20 20:21:46
【问题描述】:
我的帖子模型具有称为反馈、众筹和想法的嵌套属性。
我想编写一个方法来显示所有带有反馈的帖子、所有带有众筹的帖子以及所有带有想法的帖子的列表。我该如何做到这一点?在我看来是这样的:
Post.find(feedbacks.present?)
或
Post.all where (feedbacks.present)
【问题讨论】:
标签: ruby ruby-on-rails-4 cocoon-gem
我的帖子模型具有称为反馈、众筹和想法的嵌套属性。
我想编写一个方法来显示所有带有反馈的帖子、所有带有众筹的帖子以及所有带有想法的帖子的列表。我该如何做到这一点?在我看来是这样的:
Post.find(feedbacks.present?)
或
Post.all where (feedbacks.present)
【问题讨论】:
标签: ruby ruby-on-rails-4 cocoon-gem
我会这样做:
Post.includes(:feedbacks).where.not(feedbacks: { id: nil })
或者:
Post.joins(:feedbacks)
【讨论】:
joins 确实是正确答案,因为这将创建一个 INNER JOIN 并排除所有没有现有 Feedback 记录的记录。 includes 将创建一个 LEFT OUTER JOIN,然后必须使用 where 子句来过滤不需要的记录。(随着应用程序的增长,这可能会对性能产生一些影响)。