使用OR的Rails关联

时间:2016-11-26 13:37:48

标签: ruby-on-rails postgresql ruby-on-rails-4 activerecord associations

给定具有以下关联的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范围,但我无法解决问题。

2 个答案:

答案 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发布的解决方案