简体   繁体   English

如何按喜欢计数对用户的答案进行排序?

[英]How to sort user's answers by likes count?

I wanna iterate over all user's answers and order it by amount of likes which an answer has received, but I can't figure out how to do it, @user.answers.likes doesn't work, I found a way to find all user's answers which have likes, but that's not exactly what I want to do. 我想遍历所有用户的答案,并按收到的喜欢数量来排序,但我不知道该怎么做,@ user.answers.likes无效,我找到了一种找到所有内容的方法用户喜欢的答案,但这并不是我想要的。 Thank you for your help. 谢谢您的帮助。

models/answer.rb 型号/answer.rb

class Answer < ApplicationRecord
belongs_to :question
belongs_to :user
has_many :likes, dependent: :destroy

models/user.rb 型号/user.rb

class User < ApplicationRecord
has_many :answers
has_many :likes

models/like.rb 型号/ like.rb

class Like < ApplicationRecord
belongs_to :user
belongs_to :answer

schema.rb schema.rb

create_table "answers", force: :cascade do |t|
 t.text     "content"
 t.datetime "created_at",                  null: false
 t.datetime "updated_at",                  null: false
 t.integer  "question_id"
 t.integer  "user_id"
 t.boolean  "accepted",    default: false
 t.index ["question_id"], name: "index_answers_on_question_id"
end

create_table "likes", force: :cascade do |t|
 t.integer  "user_id"
 t.integer  "answer_id"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
end

Something like this should work in pure SQL. 这样的事情应该在纯SQL中起作用。

sql = "SELECT * FROM answers INNER JOIN likes ON answers.id = likes.answer_id WHERE COUNT(likes.id) > 0 AND answers.user_id = #{@user.id}  GROUP BY answers.id ORDER BY COUNT(likes.id)"

records_array = ActiveRecord::Base.connection.execute(sql)
@user.answers.joins(:likes)
    .select('answers.*, COUNT(likes.id) as likes_count')
    .group('answers.id')
    .order('likes_count DESC')

If you want to select only answers with likes you can add having condition 如果你想只选择您可以添加具有条件喜欢的答案

@user.answers.joins(:likes)
    .select('answers.*, COUNT(likes.id) as likes_count')
    .group('answers.id')
    .having('COUNT(likes.id) > 0')
    .order('likes_count DESC')

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM