I have a parameter in my comments called total_votes (composed of integers).
This is how I order comments by the most voted and apply will paginate at the same time:
show.rb:
def show
@post = Post.find(params[:id])
@comments = @post.comments.paginate(:page => params[:page],
:per_page => 5).order('total_votes DESC,
created_at DESC')
end
show.html.erb:
<% @comments.map do |comment| %>
<div class="comment-<%= comment.id %>">
<p>
<b>Comment:</b>
<%= comment.content %>
</p>
<p>
<b>Vote:</b>
<span class="vote-count"><%= comment.total_votes %></span>
<div class='voted-user'>
<% comment.votes.each do |vote| %>
<%= link_to vote.user.username, vote.user %>
<% end %>
</div>
</p>
<p>
<b>Commenter</b>
<%= link_to comment.user.username, comment.user %>
</p>
<p>
<b>Link</b>
<%= link_to "Show Post Comment", [@post, comment] %>
</p>
<p>
<b>Vote</b>
<%= link_to "Vote Up", vote_up_path(comment, :votable_type => "Comment"), :remote => true, :class => "vote-up" %><br />
</p>
</div>
<% end %>
<%= will_paginate @comments %>
I would like to create a link_to action so that I can manipulate this part:
@comments = @post.comments.paginate(:page => params[:page],
:per_page => 5).order('THIS_PART')
So that I can archive something like this:
mysite/posts/93?order_by=votes
and or this (order_by + will_paginate):
mysite/posts/93?order_by=votes&page=2
or something like that.
Any suggestions about how to accomplish code this in the controller and view (Please let me know if this is not the best way of doing it)?
EDIT:
This Railscasts is what you want!