通过对另一个表中的值进行分组来对订单表进

时间:2011-02-16 05:11:20

标签: ruby-on-rails database ruby-on-rails-3 sql-order-by grouping

我有一个问题表:标题 每个问题都有答案,在另一个表中:text,question_id 每个答案都有投票,在另一个表中:answer_id

我可以要求总票数

question.votes.count

我已经看过如何将投票数据库分组 http://guides.rubyonrails.org/active_record_querying.html#group

Vote.group("answer_id")

但我想通过投票来命令我的问题。这是通过另一个表的分组从表中排序数组。这可能吗?

q=Question.last
q.answers.order_by_vote #How to do this?

我认为我的答案可能是在答案模型上做一个范围,该范围使得对属于该问题的投票子集进行分组。我是对的吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

首先,当你说DB(数据库)时,我认为你的意思是表。表格数据库中的结构,用于保存特定模型的数据(例如,问题,投票和答案。在您的情况下,您有三个表格。

其次,调用attr_accessible:answer_id不会使索引可以搜索属性。无论您是否声明它都可访问,它都可以通过此属性进行搜索。除非您将其指定为数据库中的索引,否则它不是索引。 attr_accessible表示可以使用质量赋值设置属性,例如,当您调用update_attributes时。

最后,如果您想按answer_id分组并按投票数排序,您可以使用以下查询进行分组:

Vote.select('count(id) as votes, answer_id').group('answer_id').order('votes DESC')

如果您想按照分组的其他价值订购,则必须将其添加到您的论坛。这可确保您不会获得第二个值的任意结果。例如:

Vote.group('answer_id').group('column_1').order('column_1 DESC')

答案 1 :(得分:1)

我只想通过投票计数找到一种方法来组织我的链接,使用链接视图中的排序方法:

<% @user.links.sort { |a, b| b.votes.sum(:score) <=> a.votes.sum(:score) }.each do |link| %>

votes.sum(:score)从投票表中获取特定链接的投票数。

希望有所帮助。