如果我有一些模特lke
class Post < ActiveRecord::Base
has_many :comments
scope :recent ...
clas Comment
belongs_to :post
scope :written_by_user, ->(user_id) { where(:created_by => user_id) }
我想加载所有最近的帖子,并且懒得“包含”用户编写的任何可用评论。棘手的部分是我不想将帖子限制为仅包含用户评论的帖子,我想要所有这些帖子,即使其中一些帖子没有有效评论。
也许像......
Post.recent.includes(:comments).merge(Comment.written_by_user(current_user))
或
Post.recent.includes(:comments => :written_by_user(current_user))
有一种很好的Railsy方法可以做到这一点还是需要sql和子查询?
答案 0 :(得分:2)
我不知道在rails中有类似的东西。 includes
适用于您在模型上定义的关系,即获取有关如何连接表的所有详细信息。
如果您需要为一个特定用户(例如管理员)提供此功能,那么您可以在其上定义与condition
部分的额外关系,例如admin_comments
,然后将其包含在模型中,但如果你需要一个通用的解决方案,我怀疑它会起作用。
但是,您可以单独预加载注释,然后通过散列符号将前缀ID分组。这会给你几乎相同的结果。