我试图做一个activerecord合并两个activerecord::关系对象,但保持一个特定的created_at列。下面是查询:
Subscriber.joins(:subscriptions).merge(subscriptions)
其中订阅是另一个activerecord关系。我想从订阅关系中使用created_at列,但activerecord默认情况下从订阅服务器中获取created_at列。
编辑正在合并的订阅是这个方法(它返回一个activerecord::relation)
def subscriptions
@subscriptions ||= begin
s = CampaignSubscription.where(:campaign_id => campaign.id).order(order_clause)
s = s.where(:status => status)
s = s.where(:email => email) if email.present?
s = s.where("email ILIKE ?", "%#{q}%") if q.present?
s
end
end
这可能有点矫枉过正,但应该可以工作。我还没有测试过它必须应用联合,但它适用于集合。
Subscriber.all.select((Subscriber.column_names - ['created_at']).join(', ')).joins(:subscriptions).merge(subscriptions)