【发布时间】:2013-11-25 07:45:40
【问题描述】:
我在我的Item 模型上使用ActsAsTaggableOn。
要获得带有特定标签的所有项目的列表,我必须这样做:
Item.tagged_with("some_tag")
但是,我在导航部分中使用它来根据标签中的项目数量动态生成标签导航。我想要项目数量最多的 4 个标签。
所以我在我的navigation partial 中这样做:
<% Item.tag_counts.order(:count).limit(4).each do |tag| %>
<% if params[:tag] == tag.name %>
<li class="active"><%= link_to tag.name.capitalize, tag_path(tag.name) %></li>
<% else %>
<li><%= link_to tag.name.capitalize, tag_path(tag.name) %></li>
<% end %>
<% end %>
但是,当我只有 2 或 3 件商品(即任何低于 4 但大于 1 的数量)并且我有一件商品已被标记但未“批准”时(即它不会显示在页面上,直到它已被管理员批准并且标志is_approved 从false 更改为true)tag 显示在此列表中(这很糟糕,我不希望它在没有项目时出现已被批准),但是当您单击标签时该项目不会显示(这很好,因为它尚未被批准)。
如何修改each 语句以同时容纳items 已经是approved?
确定Item 是否已获批准的最简单方法如下:
item.is_approved?
例子:
> i
=> #<Item id: 17, name: "10pp-logo", link: "10pound.zip", description: "10PP Logo.<br><br>Full of graphical good...", price: 6.99, user_id: 1702, created_at: "2013-11-24 12:56:05", updated_at: "2013-11-24 12:56:05", image: "ten.png", is_approved: false, approved_at: nil>
> i.is_approved?
=> false
编辑 1:
> Item.tag_counts
(2.0ms) SELECT items.id FROM "items"
ActsAsTaggableOn::Tag Load (4.5ms) SELECT tags.*, taggings.tags_count AS count FROM "tags" JOIN (SELECT taggings.tag_id, COUNT(taggings.tag_id) AS tags_count FROM "taggings" INNER JOIN items ON items.id = taggings.taggable_id WHERE (taggings.taggable_type = 'Item' AND taggings.context = 'tags') AND (taggings.taggable_id IN(13,15,17)) GROUP BY taggings.tag_id HAVING COUNT(taggings.tag_id) > 0) AS taggings ON taggings.tag_id = tags.id
=> [#<ActsAsTaggableOn::Tag id: 6, name: "gmail">, #<ActsAsTaggableOn::Tag id: 11, name: "10pp">, #<ActsAsTaggableOn::Tag id: 4, name: "twitter">, #<ActsAsTaggableOn::Tag id: 5, name: "facebook">, #<ActsAsTaggableOn::Tag id: 8, name: "fitness">, #<ActsAsTaggableOn::Tag id: 1, name: "notepad">, #<ActsAsTaggableOn::Tag id: 2, name: "paper">, #<ActsAsTaggableOn::Tag id: 9, name: "logo">, #<ActsAsTaggableOn::Tag id: 7, name: "login form">]
【问题讨论】:
-
方法
.tag_counts返回什么?类似 [[tag_name, count][...]] 的数组? -
@tyler - 是一个数组。
-
什么数组?它的实际结构是什么?
-
@tyler 更新了问题给你看。
标签: ruby-on-rails ruby ruby-on-rails-3 acts-as-taggable-on