我正在尝试从我的InventoryPart数据库中选择部件号和公司唯一的部件。我这样做了:
parts = InventoryPart.select('DISTINCT ON (part_num, company_id) *')
但在此之后我试图链接另一个选择,以便我可以获得以前AR关系中的唯一部件号的集合:
parts.select("distinct part_num")
但所有这一切都是每InventoryPart.all
是否无法链接select
方法?
答案 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)