gpt4 book ai didi

join - 三向关联查询/has_many :through/join

转载 作者:行者123 更新时间:2023-12-02 02:08:37 30 4
gpt4 key购买 nike

我正在使用可用的指南/api/书籍自学 Rails,但我无法理解通过三种方式/嵌套 has_many :through 关联进行的连接。

我有用户相关联:通过成员(member)资格

我在多对多的中也有帖子。同一个帖子可以发布到多个组 + 组可以有很多帖子。

我希望能够为用户的主页做的是,显示的所有distinct posts < strong>用户是的成员。

例如。 current_user.groups.posts # 我希望这很简单!!

这是我的代码。

Models:

class User < ActiveRecord::Base
has_many :memberships
has_many :groups, :through => :memberships
has_many :posts # as author of post
end

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

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

class Post < ActiveRecord::Base
belongs_to :user
has_and_belongs_to_many :groups
end

路线.rb

Myapp::Application.routes.draw do
get "admin/index"
devise_for :users

resources :users do
member do
get :groups
end
end

resources :groups do
member do
get :members
post :join
post :leave
end
end

resources :posts

home_controller.rb#index

class HomeController < ApplicationController
before_filter :authenticate_user!

def index
@user = current_user
@groups = Group.all
@user_groups = @user.groups
@home_page_posts = Post.joins(:groups, :user)
end
end

这显然只是为我提供了所有组中所有帖子的不明确列表。

如果有人能指出我正确的方向。我试过了 http://guides.rubyonrails.org/active_record_querying.html#joining-tables但据我所知,这些例子都不适用。

如果您需要我提供更多信息,请告诉我。 :D

最佳答案

我相信这就是你想要的:

Post.includes(:groups => :users).where('users.id' => current_user.id)

这将生成这样的 SQL(对于 current_user.id = 1):

SELECT "posts"."id" AS t0_r0, "posts"."user_id" AS t0_r1,
"posts"."created_at" AS t0_r2, "posts"."updated_at" AS t0_r3,
"groups"."id" AS t1_r0, "groups"."created_at" AS t1_r1,
"groups"."updated_at" AS t1_r2, "users"."id" AS t2_r0,
"users"."name" AS t2_r1, "users"."created_at" AS t2_r2,
"users"."updated_at" AS t2_r3
FROM "posts"
LEFT OUTER JOIN "groups_posts" ON "groups_posts"."post_id" = "posts"."id"
LEFT OUTER JOIN "groups" ON "groups"."id" = "groups_posts"."group_id"
LEFT OUTER JOIN "memberships" ON "memberships"."group_id" = "groups"."id"
LEFT OUTER JOIN "users" ON "users"."id" = "memberships"."user_id"
WHERE "users"."id" = 1

另请参阅:Filter model with multiple has many through (不完全相同,但相似)

关于join - 三向关联查询/has_many :through/join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13802942/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com