ActiveRecord Rails 4 Chaining .select query

时间:2017-04-03 16:37:52

标签: ruby-on-rails ruby activerecord

我正在尝试从我的InventoryPart数据库中选择部件号和公司唯一的部件。我这样做了:

parts = InventoryPart.select('DISTINCT ON (part_num, company_id) *')

但在此之后我试图链接另一个选择,以便我可以获得以前AR关系中的唯一部件号的集合:

parts.select("distinct part_num")

但所有这一切都是每InventoryPart.all

返回

是否无法链接select方法?

1 个答案:

答案 0 :(得分:1)

您绝对可以链接select

Foo.select('count(some_col) as some_col_count').select('1 as one')

这将返回带有指定信息的两列。

您正在遇到问题,因为您正在尝试将SQL文字和Arel(以及随后的ActiveRecord)用于组装SQL查询的AST组合在一起。相反,你可能想尝试这个:

InventoryPart.select(:part_num, :company_id).distinct

如果您想使用DISTINCT_ON,可以执行以下操作:

table = InventoryPart.arel_table
unique_parts = InventoryPart.select(:part_num).distinct_on([table[:part_num], table[:company_id])
InventoryPart.find_by_sql(unique_parts.to_sql)