我是Ruby on Rails的新手,所以我可能缺少一个简单的解决方案。
tldr版本-如何在标签云上显示并作为可加标签的标签,这些标签分配给模型索引页面上的特定模型的所有实例?
更长的版本-我有一个名为视频的模型,在这个模型中,我已经成功地使用Acts as Taggable On和this fantastic tutorial实现了标记功能。
我现在想做的是,在视频的索引页面(index.html.erb)上,显示用户分配给各个视频的所有单个标签的摘要。例如,假设我有三个视频,每个视频的标记如下:
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)完全陌生,所以我仍然在摸索中。
发布于 2012-08-16 19:27:30
好的,经过一些修改,我想我已经找到了一个解决方案,以防其他想知道如何做的人碰巧遇到这个问题。
但是,请注意,我是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 %>这导致了一个非常基本的显示,由于我缺乏经验,我建议谨慎使用这种方法-我确信这不是最好的,甚至不是“最安全”的方法,所以要小心!
https://stackoverflow.com/questions/11973700
复制相似问题