【发布时间】:2015-01-14 02:16:16
【问题描述】:
我有 3 个 Ruby on Rails 表:用户、组和帖子(加上 has_and_belongs_to_many 的连接表“groups_users”).....
以下是相关的表定义:
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
帖子的组可能为 Null,因此用户可以在没有任何组的情况下发布一般帖子 (group_id == nil),或者他们可以在他们所属的某个组中发布帖子。
我试图弄清楚是否有一个 Active Record Query 可以给我: (1) 任何用户的所有一般帖子(无 group_id),加上 (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
【问题讨论】:
标签: mysql ruby-on-rails ruby activerecord