两个排序参数 - Rails

时间:2017-09-11 18:13:04

标签: ruby-on-rails ruby ruby-on-rails-4

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

  1. 以一个想法的票数
  2. 按降序日期
  3. 这是我的控制者:

    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 ...

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

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

    我是rails的新手,我不知道如何将这些查询本机化为

    My Rails是5.1.2

    感谢!!!

1 个答案:

答案 0 :(得分: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