проблема с облаком тегов - PullRequest
0 голосов
/ 12 января 2011

Я новичок в рельсах. Есть один вопрос об этом плагине. Я прочитал официальный файл readme и несколько других тем, но до сих пор не могу заставить его работать. Я установил его, он отлично работает для создания тегов, но я не могу сделать 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 ]

2 голосов
/ 13 января 2011

Я думаю, что это добавляет методы к классам, так что вы можете получить к ним прямой доступ.

Вы можете попробовать это:

        <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 из представления сайтов, он вызывает соответствующее определение в контроллере.Вы хотите вызвать tag_cloud в tags_helper (в плагине), поэтому вы также захотите удалить определение tag_cloud в вашем контроллере.

Вот некоторые полезные темы, которые могут помочь понять это:

  • Поиск метода (один шаг вправо, затем вверх) и
  • Self (полезно полностью понять, если начать с ruby ​​/ rails)
  • Метапрограммирование (если вы нене знакомы с этим термином)

Все хорошо, если вы плохо знакомы с рубином / рельсами.

Надеюсь, это поможет.

0 голосов
/ 21 апреля 2012

Я столкнулся с той же проблемой с этим примером сам.И еще несколько других проблем.Я исправил то, с чем столкнулся, чтобы работать для своих нужд, даже если они могут немного отклониться от первоначального намерения.

Я исправил это, переместив @tags = Site.tag_counts_on(:tags) в метод индекса.Затем я удалил метод tag_cloud.(В любом случае это не было успокоительно.)

Я также изменил link_to, чтобы перенаправлять на контроллер элементы, которые были помечены.Это включает:

  • установка текста в tag.name
  • изменение пути
  • удаление :action => :tag и :id => :tag.name
  • добавлениеидентификатор значения ключа для передачи через параметры

Я также изменил классы тегов на что-то менее общее.

Мой законченный метод контроллера:

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

Myфрагмент готового вида:

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