Ruby on rails 3 在标记云问题上充当标记对象

Ruby on rails 3 在标记云问题上充当标记对象,ruby-on-rails-3,acts-as-taggable-on,Ruby On Rails 3,Acts As Taggable On,我不熟悉rails。关于这个插件有一个问题。我已经阅读了官方的自述文件和其他一些主题,但我仍然无法使它工作。 我已经安装了它,它非常适合创建标签,但我无法制作tagcloud 我做完了 module SitesHelper include ActsAsTaggableOn::TagsHelper end class SiteController < ApplicationController def tag_cloud @tags = Site.

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

我做完了

 module SitesHelper
    include ActsAsTaggableOn::TagsHelper
  end

      class SiteController < ApplicationController
  def tag_cloud
      @tags = Site.tag_counts_on(:tags)
  end
      end
模块站点服务器
包括ActsaStaggaleon::TagsHelper
结束
类SiteController<应用程序控制器
def tag_云
@标记=站点。标记计数(:标记)
结束
结束
这个观点让我感到很惊讶

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

:tag,:id=>tag.name},:class=>css\u class%>
参数数量错误(至少1个)

24:标签:
25:     
26:     
27:   
28::tag,:id=>tag.name},:class=>css\u class%>
29:   
30: 

我做错了什么?

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

你可以试试这个:

        <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 -%>
标记云
0 -%>
css_类-%%>
这就是我用过的方法,而且很有效

注意:当您从sites视图中调用tag_cloud时,它正在调用控制器中的相应定义。您希望在tags_helper(插件中)中调用tag_cloud,因此您也希望删除控制器中的tag_cloud定义

一些有助于理解这一点的好主题包括:

  • 方法查找(向右一步, 然后向上)和
  • Self(如果从ruby/rails开始,完全理解会很好)
  • 元编程(如果您不熟悉该术语)
如果您是ruby/rails新手,那么这些都很好


希望能有所帮助。

我自己在这个例子中也遇到了同样的问题。 还有其他一些问题。 为了满足我的需要,我修正了我遇到的问题,尽管它们可能会稍微偏离我的初衷

我通过将(:tags)上的tags=Site.tag计数移动到index方法中来修复它。然后我删除了tag_cloud方法。(反正也不太平。)

我还将链接_更改为重定向到控制器,用于标记的项目。 这涉及:

  • 将文本设置为tag.name
  • 改变道路
  • 删除
    :action=>:tag
    :id=>:tag.name
  • 添加要通过参数传入的键值标识符
我还将标记类更改为不太通用的类

我完成的控制器方法:

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

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