0
我有3个Ruby on Rails的表:用户,组和帖子(加上一个连接的has_and_belongs_to_many表“groups_users”).....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
一个邮政集团可能为空,这样用户就可以使普通的帖子,没有任何集团(GROUP_ID ==无),或者他们可以使文章在他们所属的一个小组内。我试图找出是否有单个活动记录查询会给我: (1)来自任何用户的所有普通帖子(无group_id),PLUS(2)所有帖子到任何组的一个a组织用户属于。
因此,像:
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