【问题标题】:Merge activerecord model objects, and keep only one created_at column合并 activerecord 模型对象,只保留一个 created_at 列
【发布时间】:2014-03-23 04:15:07
【问题描述】:

我正在尝试对两个 activerecord::relation 对象进行 activerecord 合并,但保留一个特定的 created_at 列。这是查询:

Subscriber.joins(:subscriptions).merge(subscriptions)

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

【问题讨论】:

  • 你为什么要加入subscriptions并合并它?

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


【解决方案1】:

这可能有点矫枉过正,但它应该工作。我还没有测试过它必须应用联合,但它适用于集合。

Subscriber.all.select((Subscriber.column_names - ['created_at']).join(', ')).joins(:subscriptions).merge(subscriptions)

【讨论】:

  • 不幸的是,这对我不起作用。 Subscriber.all 返回一个数组,它有一个完全不同的 select 方法。如果我全部删除,它会返回我正在寻找的数据,但没有来自任一表的 created_at 列。
  • 我明白了。有没有办法举例说明你期望得到什么?
猜你喜欢
  • 2020-05-03
  • 2011-04-05
  • 2018-09-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多