使用相关表ruby

时间:2017-04-06 18:31:55

标签: ruby-on-rails ruby postgresql activerecord

目前,我的代码如下所示:

Author.joins(:books).group("authors.id").order("count (authors.id) desc")

根据作者撰写的书数来订购。但是,books是一个非常大的数据库表。因此,为了加快速度而不必使用.joins,如何编写可以使用.pluck语句来获取books.id的内容,例如:

Author.order("count (id: Book.uniq.pluck(:author_id)) desc")

(此代码会出现语法错误) 这主要是它如何编写和格式化的问题?或者,有没有更好的方法来重构这种类型的陈述?

1 个答案:

答案 0 :(得分:0)

您可以阅读有关ORDER BY the IN value list的问题。只有可用选项,没有连接而没有创建其他Postgres功能,使用如下命令:

    self.__animation = QPropertyAnimation(self, "geometry")
TypeError: arguments did not match any overloaded call:
  QPropertyAnimation(parent: QObject = None): too many arguments
  QPropertyAnimation(QObject, Union[QByteArray, bytes, bytearray], parent: QObject = None): argument 2 has unexpected type 'str'

您可以在Rails中构建这样的查询:

ORDER BY  id=1 DESC, id=3 DESC, id=2 DESC, id=4 DESC

这会奏效。虽然如果出于性能原因,当Author表包含大量记录时,最好使用counter_cache column(由@tegon建议)。