2017-09-11 6 views
1

私は、メイン画面上のアイデアをソートする必要があるアプリケーション、持っている:降順の日付ではアイデア 二つの注文パラメータ - レール

  • のための投票数で

    これは私のコントローラです:

    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> 
    

    私はこのような何かを考えていた:あなたは私が合計にt.votes.countを使用し、見ることができるように、メイン画面でIdeas.order ('created_at: desc'; 'votes desc')

    OBS:クラスのアイデア...

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

    Votesは私のDB内のテーブルです。

    私はレールに新たなんだと私は

    私のRailsをいわばこれらのクエリをネイティブにする方法がわからない5.1.2

    感謝です!

  • +0

    特にhttps://stackoverflow.com/a/31378899/525478 –

    +0

    [OK]を、私はunderstanded日付が、どのように私はundestandedいない票の合計を作ります。私が使用することはできませんので : @listOfIdeas = Idea.all.order(のcreated_at:DESC、投票:DESC)は は、少なくともそれは 'votes'が関係ある場合には動作しません –

    +0

    を動作しませんでした。 https://stackoverflow.com/questions/25487098/order-an-activerecord-relation-objectデフォルトで投票でソートすることはできますが、アソシエーション宣言 – whodini9

    答えて

    1

    は、レコードをソートする方法はいくつかありますが、あなたの質問の私の理解から、あなたは自分のコントローラのアクションに更新することができるはずです。

    編集: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 
    
    +0

    @ gustavo-rey愚かな私は、私は実際に投票を数えていませんでした。この構文は正しいはずですが、実際にはRails 5を実行していません(left_joinsがそこに導入されています)。あなたがそれを試してみるのが速いですが、私はレールが更新されていて、それも動作しないと答えが変わったら –

    +0

    これか、ARのcounter_cacheフィールドを使うことができますhttp://guides.rubyonrails.org/association_basics.html# counter-to-counter-cacheのオプション – meta

    関連する問題