标签云 - 如何显示类别中的所有标签

时间:2015-08-27 09:17:07

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我有一个类别列表。当您单击类别时,可以说计算机应该只显示该类别中项目的标签云,在本例中为计算机。不应显示移动电话类别中的标签。

目前,我的代码云会显示所有类别中的所有代码。

我正在使用Acts_as_tagable_gem https://github.com/mbleigh/acts-as-taggable-on

有人会如何只显示该类别中的标签?

这是我的看法。 请参阅tag_cloud

<p id="notice"><%= notice %></p>

<div class = "col-md-3">
    <h1>
      <strong><%= @category.name %></strong>
    </h1>
</div>

<div class = "col-md-9">
    <div id="tag_cloud">
      <% tag_cloud(@tags, %w[s m l]) do |tag, css_class| %>
        <%= link_to tag.name, tag_path(tag.name, id: @category.id), class: css_class %>
      <% end %>
    </div>
</div>

<div class = "col-md-12">
    <div class="line-separator"></div>
</div>

<div class = "col-md-12">
    <div id="items" class="transitions-enabled">
        <% @items.each do |item| %>
            <div class="box panel panel-default">
              <div class="itemlisttitle"><%= item.title %></div>    
            <%= link_to image_tag(item.image.url (:medium)), item %>
              <div class ="panel-body">
              <div class = "itemlistprice">$<%= item.price %></div>
              <div class = "itemlistretailer"><%= image_tag item.user.avatar(:thumb) %> Retailer: <%= link_to item.user.username, item.user %></div>
            </div>
            </div>
        <% end %>
    </div>
</div>

路线请参阅最后一行

Rails.application.routes.draw do


  resources :categories

  get 'password_resets/new'

  get 'password_resets/edit'

  get 'sessions/new'

  resources :users
  get 'user_items'  => 'users#show_user_items'
  root 'items#home'
  get 'signup'  => 'users#new'
  get 'show'  => 'users#show'
  get 'login' => 'sessions#new'
  post 'login' => 'sessions#create'
  delete 'logout' => 'sessions#destroy'
  resources :account_activations, only: [:edit]
  resources :password_resets,     only: [:new, :create, :edit, :update]

  resources :items
  get 'items_new' => 'items#new'


  get 'tags/:tag', to: 'categories#show', as: :tag

类别控制器显示操作。

  def show
    @tags = Item.tag_counts_on(:tags)
    if params[:tag]
      @items = Item.tagged_with(params[:tag])
    else
      @items = Item.where(category_id: @category.id).order("created_at DESC")
    end
  end

1 个答案:

答案 0 :(得分:0)

我想出了怎么做。

如果有人知道更好的方式,请发帖。谢谢!

在我的节目动作中

  def show
    @tags = Item.where(category_id: @category.id).tag_counts_on(:tags)
    if params[:tag]
      @items = Item.tagged_with(params[:tag])
    else
      @items = Item.where(category_id: @category.id).order("created_at DESC")
    end
  end