1

私は Ruby on Rails に非常に慣れていないので、見落としている簡単な解決策があるかもしれません。

tldr バージョン - そのモデルのインデックス ページで、特定のモデルのすべてのインスタンスに割り当てられた個別の (つまり、繰り返しのない) タグの Acts As Taggable On タグ クラウドを表示するにはどうすればよいですか?

より長いバージョン - Video と呼ばれるモデルがあり、Acts as Taggable Onとこの素晴らしいチュートリアルを使用してタグ付け機能をうまく実装できました。

ここでやりたいことは、ビデオのインデックス ページ (index.html.erb) で、ユーザーが個々のビデオに割り当てたすべての個々のタグの概要を表示することです。たとえば、次のようにタグ付けされた 3 つの動画があるとします。

Video 1: great, banana, book
Video 2: small, great, apple
Video 3: rubbish, small, banana

インデックス ページに次のタグのリストを表示したいと考えています。

great, banana, book, small, apple, rubbish.

私のモデル(省略)のコードは次のとおりです。

class Video < ActiveRecord::Base

attr_accessible :tag_list # Lots of other fields in here as well, but not relevant

acts_as_taggable_on :tags

end

ビデオヘルパーのコードは次のとおりです。

module VideosHelper

  include ActsAsTaggableOn::TagsHelper

end

最後に、gem のドキュメントに従って、次のコードをコントローラーに追加しました。

class VideosController < ApplicationController
  def tag_cloud
    @tags = Video.tag_counts_on(:tags)
  end
end

では、ビューのインデックス ページにどのコードを追加すればよいでしょうか? ドキュメントに従って、次のことをもう一度試しました。

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

しかし、ビデオのインデックス ページに移動すると、次のエラーが返されます。

undefined method `empty?' for nil:NilClass

私が言ったように、私は明らかに単純なものを欠いていますが、私は Rails (および Ruby) に完全に慣れていないので、まだ自分の足を見つけています。

4

1 に答える 1

3

OK、少しハッキングした後、解決策を見つけたと思います.これを行う方法を知りたい人がたまたまこの質問に出くわした場合に備えて.

ただし、私は RoR の初心者であるため、これはおそらく最善の解決策ではないことに注意してください。何か間違ったことをしている場合、またはより良い解決策がある場合は、遠慮なくお知らせください。

ビューに次のコードを追加して、特定のモデルのタグのリストを順番に表示します。

@tags = ActsAsTaggableOn::Tag.all(:order=>'name')

<% if @tags.count > 0 %>
  <ul>
    <% @tags.each do |tag| %>
      <li><%= link_to tag.name, tagged_url(:tag => tag.name) %></li>
    <% end %>
  </ul>
<% else %>
  <p>There are no tags on the system.</p>
<% end %>

これは非常に基本的な表示になります。私の経験不足のため、このアプローチは慎重に使用することをお勧めします。これは最善の方法ではなく、「最も安全な」方法でさえないので注意してください。

于 2012-08-16T11:27:29.603 に答える