Rails:如何合并或加入两个活动记录集合?

时间:2016-02-11 11:10:35

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

在我的客户控制器中,我有两个集合如下:

第一个是获取客户的集合,其中expiryDate列具有有效日期,如下所示:

@customer_with_expirydate = Customer.where.not(expiryDate: nil)

第二个是获取客户的集合,其中expiryDate列为nil或nnot,如下所示:

@customer_no_expirydate = Customer.where(expiryDate: nil)

现在我想将这两个集合的组合结果显示在一个表结构中,这里有一个条件就像列出所有expiryDate的客户之后只需要列出没有到期的客户。

我需要以下内容:

@all_customers = @customer_with_expirydate + @customer_no_expirydate

重要的是没有到期的客户应该追加到最后。

3 个答案:

答案 0 :(得分:3)

只用一个查询做一些简单的事情怎么样?类似的东西:

@all_customers = Customer.order(expiryDate: :desc)

答案 1 :(得分:2)

@Praveen你已经给出了答案:

@all_customers = @customer_with_expirydate + @customer_no_expirydate

返回所有有效期限的客户,然后是没有到期日的客户。

类似地:

@all_customers = @customer_no_expirydate + @customer_with_expirydate

返回所有没有到期日的客户,然后是有到期日的客户。

Then you can loop @all_customers inside the table.

如果你只能使用一个查询,那么你应该使用:

@all_customers = Customer.order(expiryDate: :desc)

答案 2 :(得分:2)

让我们通过db查询对客户进行排序,它比使用数组追加更有效:

>>> [os.path.join(a, b) for a, b in zip(foo, bar)]
['/directory/1/1.txt', '/directory/2/2.txt']

因此@ordered_customers = Customer.order('expiryDate DESC NULLS LAST') 的客户将在结果的最后!