시청에 내가 레일 테이블에 3 루비가 : 사용자, 그룹 및 게시물 (플러스 a를 has_and_belongs_to_many 표 "groups_users"을 가입) ..... 여기에서 액티브 쿼리 has_and_belongs_to_many 관계
이 관련 테이블 정의입니다 :create_table "posts", force: true do |t|
t.integer "user_id"
t.integer "group_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "groups", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "users", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "groups_users", id: false, force: true do |t|
t.integer "user_id", null: false
t.integer "group_id", null: false
end
그리고 모델 :
Group Model:
has_and_belongs_to_many :users, dependent: :destroy
has_many :posts, inverse_of: :group, dependent: :destroy
User Model:
has_many :posts, inverse_of: :user, dependent: :destroy
has_and_belongs_to_many :groups, dependent: :destroy
has_many :groupposts, through: :groups, source: :posts, class_name: "Post"
Post Model:
belongs_to :group, inverse_of: :posts
belongs_to :user, inverse_of: :posts
사용자가 어떤 그룹 (GROUP_ID == 전무)하지 않고 일반 게시물을 할 수 있도록 게시물의 그룹이 NULL이 될 수도 있고, 그들은 게시물을 만들 수 있습니다 그들이 속한 그룹 중 하나에서
내게 줄 수있는 단일 Active Record Query가 있는지 알아 내려고합니다. (1) 모든 사용자의 모든 일반 게시물 (group_id 없음), PLUS (2) 모든 그룹의 모든 게시물 사용자가 속합니다.
그래서 같은 :
Post.where(:group_id => nil)
고유과 결합 : 동일한에서 그 결과를 가질 수 없습니다
Post.includes(:groups [:users]).where("(posts.group_id IS NULL) OR (posts.groups.users CONTAINS ?)", @user.id) # THIS IS NOT CORRECT, THE SECOND HALF OF THE 'OR' STATEMENT IS GARBAGE
당신을 감사에게 도움이 될 수 사용자 그룹
희망의 모든 게시물을 시도 할 수 있습니다. 나는 upvote에 너무 새롭다, 그러나 당신의 응답은 아주 도움이된다! – gravy