加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 与ActiveRecord和Rails 3的复杂JOIN

发布时间:2020-12-12 06:22:13 所属栏目:MsSql教程 来源:网络整理
导读:我有以下型号: class User ActiveRecord::Base has_many :memberships has_many :groups,:through = :membershipsendclass Group ActiveRecord::Base has_many :memberships has_many :users,:through = :membershipsendclass Membership ActiveRecord::Base
我有以下型号:
class User < ActiveRecord::Base
  has_many :memberships
  has_many :groups,:through => :memberships
end

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users,:through => :memberships
end

class Membership < ActiveRecord::Base
  belongs_to :user
  belongs_to :group
end

class Post < ActiveRecord::Base
  belongs_to :group
end

我必须找到属于用户所属组的所有帖子.我用这种方法做到了:

@post = Post.joins(:group => {:memberships => :user}).where(:memberships => {:user_id => current_user.id})

但它会产生效率低下的SQL:

SELECT "posts".* FROM "posts" INNER JOIN "groups" ON "groups"."id" = "posts"."group_id" INNER JOIN "memberships" ON "memberships"."group_id" = "groups"."id" INNER JOIN "users" ON "users"."id" = "memberships"."user_id" WHERE "memberships"."user_id" = 1

我想做一个像这样的查询:

SELECT posts.* FROM posts INNER JOIN memberships ON memberships.group_id = posts.group_id WHERE memberships.user_id = 1

如何在不使用原始SQL的情况下执行此操作?

解决方法

这样的东西应该适合你,虽然它需要混合一点原始SQL
Post.joins("INNER JOIN memberships ON memberships.group_id = posts.group_id").where(:memberships => {:user_id => current_user.id})

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读