两个has_many协会之间的联合

时间:2014-04-25 07:09:57

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

我使用带有Postgres的rails 4.1,我有一个像这样的模型:

class User < ActiveRecord::Base
  has_many :events
  has_many :event_memberships
  has_many :shared_events, through: :event_memberships, source: event

  def all_events
    #... code goes here
  end
end

我想在事件和shared_events关联之间建立联合,但我不能让它工作。

我唯一能让它发挥作用的是:

def all_events
  events + shared_events
end

但它会执行2个SQL查询而不是1个,我将无法订购或限制结果。

我也尝试过这样的事情:

def all_events
  User.find_by_sql("(#{events.to_sql}) UNION (#{shared_events.to_sql})")
end

或者这种方法https://coderwall.com/p/9hohaa 但是这两种方法都会抛出这个错误:

PG::UndefinedParameter: ERROR:  there is no parameter $1

这似乎是rails 4+中的已知错误,并且无法解决https://github.com/rails/rails/issues/13686

所以这里我唯一的选择似乎是编写普通的旧SQL。 有更好想法的人吗?

0 个答案:

没有答案