Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按活动记录中的频率排序结果_Ruby On Rails_Ruby_Rails Activerecord - Fatal编程技术网

Ruby on rails 按活动记录中的频率排序结果

Ruby on rails 按活动记录中的频率排序结果,ruby-on-rails,ruby,rails-activerecord,Ruby On Rails,Ruby,Rails Activerecord,我不熟悉Rails和活动记录查询。我想按频率对查询结果排序 作为SQL查询,它可以是: SELECT author FROM books GROUP BY author ORDER BY COUNT(*) DESC LIMIT 10; (我发现了这一点,这对构建这个问题非常有帮助。) 我现在所拥有的将按字母顺序进行: <p>The authors are: <% @books.select(:author).distinct.order(:author).each do |b

我不熟悉Rails和活动记录查询。我想按频率对查询结果排序

作为SQL查询,它可以是:

SELECT author FROM books GROUP BY author ORDER BY COUNT(*) DESC LIMIT 10;
(我发现了这一点,这对构建这个问题非常有帮助。)

我现在所拥有的将按字母顺序进行:

<p>The authors are: <% @books.select(:author).distinct.order(:author).each do |book| %>
  <br><%= book.author %> <%= @books.where(author: book.author).count %>
<% end %></p>
作者是:

这会让我感到惊讶,例如:

艾萨克2号,阿西莫夫

迪克,菲利普K.8

品钦,托马斯3

等等。 但我想按频率(迪克、品钦、阿西莫夫)排序结果,而不是按字母顺序

如果可能的话,我想将作者姓名和图书数量作为单独的输出(希望能够将其切换到一个表),尽管我确信有更好的方法可以获得输出中的频率(而不是
@books.where(author:book.author).count
)。但主要问题是如何正确地进行初始订购

非常感谢您的帮助。

试试这个

Book.group("author").order("count_author desc").count("author")
所以你的观点看起来像

<% @books.group("author").order("count_author desc").count("author").each do |author, count| %>
  <br><%= author %> <%= count %>
<% end %></p>


试试这个

Book.group("author").order("count_author desc").count("author")
所以你的观点看起来像

<% @books.group("author").order("count_author desc").count("author").each do |author, count| %>
  <br><%= author %> <%= count %>
<% end %></p>



使用下面的示例查询和生成的sql

Task.group(:project_id).limit(10).count(:id)
SELECT COUNT(`tasks`.`id`) AS count_id, project_id AS project_id FROM `tasks` GROUP BY project_id LIMIT 10
Output: {18=>1206, 22=>82, 23=>25, 25=>77, 29=>1, 35=>1, 42=>30, 44=>1, 45=>17, 53=>12}
您可以看到,按照惯例,rails使用
count\uu
进行计数。您可以使用此约定按该计数排序

Task.group(:project_id).limit(10).order('count_id DESC').count(:id)
SELECT COUNT(`tasks`.`id`) AS count_id, project_id AS project_id FROM `tasks` GROUP BY project_id ORDER BY count_id DESC LIMIT 10
Output: {145=>1949, 105=>1535, 18=>1206, 141=>738, 23804=>667, 9892=>524, 196=>478, 26969=>338, 24119=>330, 28047=>300}
更好的方法是在控制器中准备变量并在视图中访问它们

# controller
@counts = Book.group(:author).order('count_id DESC').count(:id)

# view
<% @counts.each do |author, count| %>
  <%= author %> <%= count %>
<% end %>
#控制器
@counts=Book.group(:author.order('count\u id DESC')。count(:id)
#看法

上面的
@counts
包含一个散列,其中键是作者,值是作者对书籍的计数。

使用下面的示例查询和生成的sql

Task.group(:project_id).limit(10).count(:id)
SELECT COUNT(`tasks`.`id`) AS count_id, project_id AS project_id FROM `tasks` GROUP BY project_id LIMIT 10
Output: {18=>1206, 22=>82, 23=>25, 25=>77, 29=>1, 35=>1, 42=>30, 44=>1, 45=>17, 53=>12}
您可以看到,按照惯例,rails使用
count\uu
进行计数。您可以使用此约定按该计数排序

Task.group(:project_id).limit(10).order('count_id DESC').count(:id)
SELECT COUNT(`tasks`.`id`) AS count_id, project_id AS project_id FROM `tasks` GROUP BY project_id ORDER BY count_id DESC LIMIT 10
Output: {145=>1949, 105=>1535, 18=>1206, 141=>738, 23804=>667, 9892=>524, 196=>478, 26969=>338, 24119=>330, 28047=>300}
更好的方法是在控制器中准备变量并在视图中访问它们

# controller
@counts = Book.group(:author).order('count_id DESC').count(:id)

# view
<% @counts.each do |author, count| %>
  <%= author %> <%= count %>
<% end %>
#控制器
@counts=Book.group(:author.order('count\u id DESC')。count(:id)
#看法

上面的
@counts
包含一个散列,其中键是作者,值是该作者的书籍计数。

仅供参考:查询应在控制器中仅供参考:查询应在控制器中