这将显示在侧边栏中,这就是我将它放在应用程序控制器中的原因。我对更好的解决方案持开放态度
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :get_tags_latest, :get_tags_popular
def get_tags_latest
@tags_latest = Tag.all.first(5)
end
def get_tags_popular
@tags_popular = Tag.by_most_resources.limit(10)
end
end
标签.rb:
class Tag < ActiveRecord::Base
self.include_root_in_json = false
has_many :resource_tags
has_many :resources, :through => :resource_tags
attr_accessible :name
validates :name, :presence => true,
:length => { :within => 2..20 },
:uniqueness => { :case_sensitive => false }
scope :by_most_resources,
joins("INNER JOIN resources ON resources.tag_id = tags.id").
group("tags.*").order("count(resources.id) DESC")
end
sidebar.html.erb
<ul class="tag-list">
<% @tags_popular.each do |t| %>
<li><%= link_to t.name, tag_path(t), :class => :tag %> (<%= t.resources.count %>)</li>
<% end %>
</ul>
目前我没有太多代码(希望它也在正确的位置)......我真正想做的就是显示按 tag.resources.count 排序的最受欢迎的 10 个标签,以及最新的 5 个标签按日期排序。我试着四处寻找 find(:order => ) 但事实证明这无济于事。
有没有神奇的方法可以做到这一点?谢谢