我使用带有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。 有更好想法的人吗?