ruby on rails 3 -通过投票来订购微博



我不知道如何在这里格式化代码。我在这里列出了这个问题(以更好的方式):http://railsforum.com/viewtopic.php?id=43839

有一个简单的微博网站与投票功能。我希望能够显示张贴的微帖子投票。大小。我似乎不能让它工作,希望你能指导一下。

模型:

class Micropost
  attr_accessible :content
  has_many :votes 
  belongs_to :user 
  default_scope :order => 'microposts.created_at DESC'

class Vote
  belongs_to :micropost

视图:

# microposts page
<% unless @picture.microposts.empty? %>
  <table class="microposts" summary="User microposts">
    <%= render @microposts %>
  </table>
<% end %>
# microposts partial
<tr>
  <td class="micropost">   
    <span class="gravatar">     
      <%= link_to gravatar_for(micropost.user, :size => '60'), micropost.user %>
    </span>
    <span class="content" >
      <%= micropost.content %>
    </span>
    <span id="vote_total_<%= micropost.id %>" class="micropost_votes">
      votes:<%= micropost.votes.size %>
    </span>
  <% if current_page?(root_path) && signed_in? %>
    <span id="vote_button">
      <%= button_to 'vote', micropost_votes_path(:micropost_id => micropost),
          :remote => true 
      %>
    </span>
  <% end %>  
  </td>
</tr>

控制器:

# VotesController
def create
  @micropost = Micropost.find(params[:micropost_id])
  @vote      = @micropost.votes.build params[:micropost_id]
  respond_to do |format|
    if @vote.save
      format.html { redirect_to @micropost }
      format.js        
    else
      format.html { redirect_to root }
    end
  end
end

我已经能够按created_at日期对微博进行排序,但我似乎无法按micropost.votes.size对微博进行排序。这似乎与根据另一个模型的状态对一个模型进行排序有关。

Micropost.all(:select => "#{Micropost.table_name}.*, COUNT(#{Vote.table_name}.id) number_of_votes",
         :joins => :votes,
         :order => "number_of_votes desc")

嗯,这是我找到的最好的解决方案。在渲染微帖子的视图中,我添加了:

.sort_by { |micropost| micropost.votes.size }
所以实际的渲染代码看起来像这样:
<%= render @microposts.sort_by { |micropost| micropost.votes.size } %>

我实际上颠倒了我的帖子,以便获得最高票数的帖子在顶部。这很简单:

<%= render @microposts.sort_by { |micropost| micropost.votes.size }.reverse %>

我不知道这是否会造成数据库性能问题,但它似乎工作得很好。

相关内容

  • 没有找到相关文章

最新更新