Rails/ActiveRecord,如何防止pluck覆盖select?

3
作为一个例子,我想运行像这样的查询:
people = Person.select("GROUP_CONCAT(`first` SEPARATOR ', ') as names") \
.where(last: "smith").group(:age).order(:age)

# which basically gives me something like
# SELECT GROUP_CONCAT(`first` SEPARATOR ', ') as names ...

#####################

# but when I add pluck
people.pluck(:names)
# it does
# SELECT names ...
# and gives me an Unknown column error

如何让Rails/ActiveRecord处理选择查询结果上的pluck而不是覆盖它?

1个回答

3

不可能做到。无论你指定了什么选择器,pluck 都会覆盖它。但你可以这样做:

people = Person.where(last: "smith").group(:age).order(:age)
people.pluck("GROUP_CONCAT(`first` SEPARATOR ', ')")

或者是这样:
people = Person.select("GROUP_CONCAT(`first` SEPARATOR ', ') as names") \
.where(last: "smith").group(:age).order(:age)
people.all.collect(&:name)

你不再需要末尾的“我想要在下一行放置 .”反斜杠了。 - mu is too short
复制粘贴自问题,如果他正在使用1.8.7呢 :) - mechanicalfish
@Derek:mechanicalfish是对的,你需要在1.8.7中进行转义才能使其表现得合理,但更新的Ruby已经足够聪明,可以做正确的事情。 - mu is too short

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接