У меня есть 3 Рубин на Rails таблиц: пользователи, группы и сообщения (плюс присоединиться к таблице «groups_users» для has_and_belongs_to_many) .....ActiveRecord запрос для соединения 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
Группа A Пост может быть Null, так что пользователи могут сделать общие сообщения без каких-либо групп (group_id == ноль), или они могут сделать сообщения в пределах одной из групп, к которым они принадлежат.
Я пытаюсь выяснить, есть ли один запрос активной записи, который даст мне: (1) все общие сообщения (no group_id) от любого пользователя, PLUS (2) все сообщения в любую группу, что Пользователь принадлежит.
Так что-то вроде:
Post.where(:group_id => nil)
однозначно присоединился:
@user.groupposts
Я думаю, что это что-то в районе:
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
спасибо. Я слишком новичок здесь, чтобы поддержать, но ваш ответ очень полезен! – gravy