【问题标题】:How to limit tag_cloud to the top 20 taggings_count?如何将 tag_cloud 限制为前 20 个 taggings_count?
【发布时间】:2015-06-11 15:55:31
【问题描述】:

我们如何将tag_cloud 限制为计数最多的 20 个标签?

[1] pry(main)> Tag.find(1)
  Tag Load (0.2ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."id" = ? LIMIT 1  [["id", 1]]
=> #<Tag:0x007fcae0cf88e0 id: 1, name: "test", taggings_count: 4>
[2] pry(main)> Tag.find(4)
  Tag Load (0.1ms)  SELECT  "tags".* FROM "tags" WHERE "tags"."id" = ? LIMIT 1  [["id", 4]]
=> #<Tag:0x007fcae0ca0ac8 id: 4, name: "test the comma", taggings_count: 0>
[3] pry(main)>
Started GET "/as

class Tag < ActiveRecord::Base
  has_many :taggings

tag.rb

scope :top_20, -> do
  limit(20) #This limits it to the 20 tags first made regardless of if those tags have since been deleted?
end

我们如何使用taggings_count: 0tag_cloud 中删除标签(这可能需要另一个 SO 问题)?如果您在此处回答,将获得奖励积分;)

_tags.html.erb

<% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %>
  <%= link_to tag.name, tag_path(tag), :class => css_class %>
<% end %>

如果您需要进一步的解释或代码来帮助我,请告诉我:-]

架构

  create_table "taggings", force: true do |t|
    t.integer  "tag_id"
    t.integer  "taggable_id"
    t.string   "taggable_type"
    t.integer  "tagger_id"
    t.string   "tagger_type"
    t.string   "context",       limit: 128
    t.datetime "created_at"
  end

  add_index "taggings", ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true
  add_index "taggings", ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context"

  create_table "tags", force: true do |t|
    t.string  "name"
    t.integer "taggings_count", default: 0
  end

  add_index "tags", ["name"], name: "index_tags_on_name", unique: true

【问题讨论】:

    标签: ruby-on-rails ruby tags acts-as-taggable-on tag-cloud


    【解决方案1】:

    代码如下:

    scope :top_20, -> {
      where("taggings_count != 0").order("taggings_count DESC").limit(20)
    }
    

    【讨论】:

    • 你很快!我确实喜欢 tag_cloud 的外观,因为它在大小上混合和匹配,而不是所有最高的首先显示然后按 desc 顺序下降。在前 20 名中仅以不同顺序显示前 20 名的同时保持这种云的感觉是可能的吗,Arup?
    • @AnthonyGalli.com 你在说 Goruping 吗?我想我没听懂你.. 混合和匹配是什么意思?
    • 也许可以说前三名:最大的大小。而不是按照那个顺序出现,它会像 Big BIGGEST small 一样。所以在第一种情况下,.order("taggings_count DESC") 会弄清楚什么是受限的,然后从那里它可能是.order('RANDOM()'))
    • 好吧 :) 我试过 scope :top_20, -&gt; { where("taggings_count != 0").order("taggings_count DESC").limit(4).order('RANDOM()') } 但后来随机只在尺寸顺序内随机所以如果有最大 #1 最大 #2 大 #1 #2 它可以随机化为最大 #2 最大 # 1 大 #2 大 #1
    • @AnthonyGalli.com 当然……让我想想……我认为可能……但还不确定……真正的问题是我需要在没有数据的情况下思考……所以……需要时间。 . :/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多