gpt4 book ai didi

ruby-on-rails - 在单独的表中按 "vote"记录数显示帖子

转载 作者:太空宇宙 更新时间:2023-11-03 18:02:10 25 4
gpt4 key购买 nike

我是 Rails 的新手,所以不要着急。我创建了一个博客,还为用户创建了表示他们“喜欢”特定帖子的功能。我实现它的方法是使用 post 表和一个单独的表“投票”。当用户单击“喜欢”按钮时,它会将值为“1”和特定帖子 ID 的记录发送到“投票”表。

我想在侧边栏中显示“最喜欢”的帖子。我该如何调用这样的东西。我想显示 post_title 和“投票”的数量,也就是说,我想以某种方式查询“投票”表以获得记录最多的 post_id 并按降序显示它们。

我希望这是一个简单的问题。

最佳答案

有几种方法可以做到这一点,但可能最通用和 Rails-ish 是创建一个模块,其中包含一个方法来进行排名,然后让任何可以“喜欢”的类或关联扩展该模块.

# lib/likable.rb
#
module Likable
def most_liked (limit = 10)
# This may be possible without a find_by_sql... see the API docs.
find_by_sql("SELECT Posts.*, SUM(votes.count) AS num_votes FROM Posts, Votes WHERE Posts.id = post_id GROUP BY post_id ORDER BY num_votes DESC LIMIT #{limit}")
end
end

# app/models/post.rb
#
require 'likable'

class Post < ActiveRecord::Base
extend Likable
# ...whatever else you've got in here
end

# app/models/user.rb (or any other model with things that can be "liked")
#
require 'likable'

class User < ActiveRecord::Base
has_many :posts, :extend => Likable
# ...the rest of the User class
end

这让您可以做...

Post.most_liked                 # => an array of the 10 most liked posts
@some_user.posts.most_liked(5) # => that user's 5 most liked posts

如果您稍后需要,您可以向模块添加方法以查看,例如,特定帖子有多少票。您还可以在 Vote 中将 post_id 更改为 target_id 并使其成为多态关联,然后您可以使用您的 Likable 模块投票任何东西,而不仅仅是帖子(如果你这样做的话,你需要概括调用以在 most_liked 中查找)。

关于ruby-on-rails - 在单独的表中按 "vote"记录数显示帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1771630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com