两个排序参数 - Rails [重复]

Posted

技术标签:

【中文标题】两个排序参数 - Rails [重复]【英文标题】:Two ordering parameters - Rails [duplicate] 【发布时间】:2017-09-11 18:13:03 【问题描述】:

我有一个应用程序,我需要在主屏幕上对想法进行排序:

    按一个想法的票数 按降序日期

这是我的控制器:

def telaPrincipal   
    @listOfIdeas = Idea.all
end 

这是我的 html

      <% @listOfIdeas.each do |t| %>
    <tr>
      <td><%= t.created_at.strftime("%d/%m/%y")%></td>

  <td><%= link_to t.title, t.link_to_idea.match(/^.*:(:\/\/)/) ? t.link_to_idea : "http://#t.link_to_idea", :target => "_blank" %></td>

<%if (isIdeaVotedByUser t, current_user.id)%>
<td>
    <%= link_to image_tag("like-button.png", border: 0), action: 'destroy', controller: 'votes', id: t.votes.where(:users_id => current_user.id).pluck(:id).first, data:confirm:"Tem certeza que deseja cancelar o seu voto?",
 :method => :delete, class: 'like-button'%>
</td>
<%else %>
<td>
    <%= link_to image_tag("semlike-button.png", border: 0), action: 'create', controller: 'votes' , idea_id: t.id , idea_user: t.users_id, 
 :method => :post, class: 'like-button'%>
</td>
<% end %>


<td>
<%= t.votes.count%>
</td>

我在想这样的事情:Ideas.order ('created_at: desc'; 'votes desc')

在主屏幕上,如您所见,我使用t.votes.count 进行求和。

Obs.:课堂创意...

class Idea < ActiveRecord::Base
  has_many :votes , :dependent => :destroy
  belongs_to :user
end

Votes 是我数据库中的一个表。

我是 Rails 新手,我不知道如何使这些查询成为原生查询

我的 Rails 是 5.1.2

谢谢!!!

【问题讨论】:

尤其是***.com/a/31378899/525478 好的,日期我明白了,但是我不明白如何计算总票数。因为我不能使用:@listOfIdeas = Idea.all.order(created_at: :desc, votes: :desc) 至少没用 如果votes 是一个关系,那将不起作用。 ***.com/questions/25487098/…默认情况下可以按投票排序,但是在关联声明中 或***.com/a/16456610/525478(我认为您也可以使用新语法来做到这一点......) 【参考方案1】:

有几种方法可以对记录进行排序,但根据我对您问题的理解,您应该能够更新您的控制器操作:

编辑:更新为计算投票并使用 Rails 5 left_joins 包含计数为 0 的投票

def telaPrincipal
  @listOfIdeas = Idea
                   .left_joins(:votes)
                   .group(:id)
                   .select('ideas.*', 'COUNT(votes.id) vote_count')
                   .order('vote_count DESC', created_at: :desc)
end

【讨论】:

@gustavo-rey 愚蠢的我,我实际上并没有计算选票。这种语法应该是正确的,但我现在实际上并没有运行 Rails 5(那里引入了 left_joins)。您可以更快地尝试一下,但我正在更新 rails,如果我也发现它不起作用,我会更改答案 这个或者你可以使用AR的counter_cache字段guides.rubyonrails.org/…

以上是关于两个排序参数 - Rails [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在to_json方法中Rails“参数数量错误(1代表0)”[重复]

Mongo:使用 $in 数组参数对结果进行排序 [重复]

Mongo:使用 $in 数组参数对结果进行排序 [重复]

使用 NSURL 在使用 JSON 的 Rails 服务器上创建新帖子时重复的参数

在Rails中使用自定义属性作为外键[重复]

分页功能设计(解决数据重复问题)