0

我是新来的轨道。关于这个插件有一个问题。我已经阅读了官方自述文件和其他一些主题,但我仍然无法使其工作。我已经安装了它,它非常适合创建标签,但我无法制作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: 

我究竟做错了什么?

4

2 回答 2

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 -%>

这就是我所使用的并且有效。

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

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

  • 方法查找(向右一步,然后向上)和
  • 自我(如果从 ruby​​/rails 开始,很好理解)
  • 元编程(如果您不熟悉该术语)

如果您是 ruby​​/rails 新手,一切都很好。

希望有帮助。

于 2011-01-13T09:10:05.423 回答
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
于 2012-04-21T07:48:55.417 回答