【发布时间】:2012-12-25 17:09:01
【问题描述】:
所以我在这里有一个社交书签式的设置。 4 个表:posts、users、cmets 和 votes。主页只是指向帖子模型的索引页面并在Post.all 数组上运行一个循环并显示一些基本信息:title、upvotes - downvotes(我称它为帖子的“分数”)。
现在我需要做的是,通过它们的分数除以它们的相对创建时间(自页面加载以来创建这篇文章以来的秒数?)在模型中排序这些帖子(我猜)。 Rails 在我的帖子对象中给了我一个created_at 列,我有一个如下所示的投票表:
帖子模型
class Post < ActiveRecord::Base
attr_accessible :id, :title, :url, :user_id, :comment_count, :agreement
has_many :votes
has_many :comments
belongs_to :user
end
投票模型
class Vote < ActiveRecord::Base
attr_accessible :direction, :post_id, :vote_type, :user_id
belongs_to :user
belongs_to :post
belongs_to :comment
end
post 模型中的 ID 与投票模型中的 post_id 相对应。
:direction 是一个布尔值。 0 与赞成投票相关,1 与反对投票相关。 Post_ID 是投票的帖子的 ID。
我应该如何排序帖子,以便它们在主页上的位置由它们的创建时间和他们的赞成票 - 反对票决定?
def index
@posts = Post.join(:votes).order(<???>)
end
ETA:@shweta 在加入帖子和投票表方面走上了正轨。但是,他的答案的选择部分不起作用。
【问题讨论】:
-
应该有belongs_to :user belongs_to :post belongs_to :comment # 单数不是复数
-
如果我这样做,它会破坏来自数据库的 :user 属性。这是一个不同的错误,有什么想法吗?
-
@shweta 通过将帖子模型中的用户列重命名为 user_id 来解决此问题。
标签: mysql ruby-on-rails ruby sorting