标记云问题的行为可标记

时间:2011-01-11 21:17:18

标签: ruby-on-rails-3 acts-as-taggable-on

我是铁杆新手。关于这个插件有一个问题。我已经阅读了官方自述文件和其他一些主题,但我仍然无法使其工作。 我已经安装了它,它非常适合创建标签,但我无法使 tagcloud

我已经完成了

 module SitesHelper
    include ActsAsTaggableOn::TagsHelper
  end

      class SiteController < ApplicationController
  def tag_cloud
      @tags = Site.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 %>

错误的参数数量(至少为1)

24: <b>Tags:</b>
25:     <%= @site.type_list %>
26:     
27:   <% tag_cloud @site.type_list, %w(css1 css2 css3 css4) do |tag, css_class| %>
28:     <%= link_to tag.name, { :action => :tag, :id => tag.name }, :class => css_class %>
29:   <% end %>
30: 

我做错了什么?

2 个答案:

答案 0 :(得分:2)

我认为它为类添加了方法,因此您可以直接访问它们。

你可以试试这个:

        <h2>Tag Cloud</h2>
    <% if Site.tag_counts.length > 0 -%>
        <% tag_cloud Site.tag_counts, %w(css1 css2 css3 css4) do |tag, css_class| -%>
            <%= link_to tag.name, home_tag_path(tag), :class => css_class -%>
        <% end -%>
    <% else -%>
        <%= content_tag :p, 'No tags' -%>
    <% end -%>

这就是我使用过的,它有效。

N.B。当您从站点视图中调用tag_cloud时,它将调用控制器中的相应定义。您想在tags_helper中调用tag_cloud(在插件中),因此您也需要删除控制器中的tag_cloud定义。

要涵盖的一些好主题可能有助于理解这一点:

  • 方法查找(向右一步, 然后上来)和
  • 自我(如果从红宝石/铁轨上开始,则很好理解)
  • 元编程(如果您不熟悉该术语)

如果你不熟悉红宝石/铁轨,那么所有人都很高兴。

希望有所帮助。

答案 1 :(得分:0)

我自己也遇到了同样的问题。 还有一些其他问题。 我修复了我遇到的问题,即使它们可能略微偏离初衷。

我通过将@tags = Site.tag_counts_on(:tags)移动到索引方法中来修复它。然后我删除了tag_cloud方法。 (无论如何,这不是很安静。)

我还更改了link_to以重定向到控制器以获取已标记的项目。 这涉及:

  • 将文本设置为tag.name
  • 改变路径
  • 删除:action => :tag:id => :tag.name
  • 添加要通过params传递的键值标识符

我还将标记类更改为不太通用的类。

我完成的控制器方法:

def index
  @list = List.new
  @tags = List.tag_counts_on(:tags)
end

我完成的观看片段:

<% tag_cloud(@tags, %w(tag1 tag2 tag3 tag4)) do |tag, css_class| %>
  <%= link_to tag.name, lists_path(:id => tag.name), :class => css_class