[英]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.