给定具有以下关联的List
模型:
has_many :list_group_memberships, dependent: :destroy
has_many :groups, through: :list_group_memberships
has_many :users, -> { unscope(:order).uniq }, through: :groups, source: :users
基本上我需要返回以下内容,但作为ActiveRecord :: Relation,而不是数组:
def users
super + [user]
end
理想情况下,users
关系会使用or
范围,但我无法解决问题。
答案 0 :(得分:1)
你可以在没有union gem的情况下做到这一点:
# app/models/list.rb
def users_with_current_user
# Assuming `users` is the has_many :users relation on the list
# and `user` is a belongs_to relation on this list...
User.where(id: users).or(User.where(id: user))
end
这将自动在list_group_memberships表上创建一个INNER JOIN。
答案 1 :(得分:0)
我设法使用active_record_union gem和以下内容解决了这个问题:
def users
super.union(User.where(id: user_id))
end
编辑:我改变了我的实现以使用@mysmallidea发布的解决方案